管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
5 \8 I1 T; t& o+ d0 b+ V我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。5 h- ]9 F5 G) x) O
Talk is cheak , show me the code.. Y4 J* w' T: ^- ^) Q
服务端代码:
9 [/ T v# m) z0 e! Y) d- #include<stdlib.h>9 U$ W$ c# y' A4 W! ~- m
- #include<WinSock2.h>
2 Q: R ~% G n - #pragma comment(lib,"ws2_32.lib")$ Y9 R4 P$ a4 _1 X% s7 x3 `
- int main(){
0 n8 N2 P4 b8 @' j! @% D4 X" {' { - WSADATA wsd;
3 d! h% i6 P6 o7 J" U - SOCKET sockServer;7 ~( K! m7 a* H/ o
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号+ K; z4 C, \& o6 N* L6 z7 P& L3 C
- SOCKET sockClient;# E; z# f% c# ?5 ^8 v, C
- SOCKADDR_IN clientaddr;
$ _% M' ^4 X( A9 L9 @3 | - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
2 Z/ y9 w! H [. [7 K - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
6 D: h h0 F, ?, K! e4 R9 v) ] - ; m- r1 Q3 @6 l+ _5 H+ c
- + _( C* Q& G$ ^$ O B
- if (sockServer != -1 && sockServer != INVALID_SOCKET){4 O9 B, {, Z A4 } ~
- printf("Socket has been created :%d", sockServer);
1 v, C* f- x8 w& D$ j* E& y2 |3 g - }% q5 u" n5 ]+ \9 _( Y
- else{$ l h8 C9 F2 u" s
- printf("Socket create failed.");% a2 h# j- o( e" o) l
- exit(0);
E! K* c2 S2 a - }
/ A- e% N# P2 @% s( ] - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
7 h5 T" Z9 S( N1 ^" z( I3 M, Z$ l7 d - serveraddr.sin_family = AF_INET;; \/ r8 _/ e) u+ H4 x: ^4 m5 I9 j( ?' Y
- serveraddr.sin_port = htons(6000);//绑定端口6000
* i" t- {: ~+ T, G( H$ I! ]; ]" h3 i - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));9 I6 L. Y% P. ~# L( |3 }7 k1 \3 t& H
- char recvBuf[100];% f2 w; {. `3 B4 M$ l
- int len = sizeof(SOCKADDR);/ | k; _' r) h5 M" I: n0 B
- listen(sockServer, 5);//5为等待连接数. x2 `/ o6 z1 F/ G# o! h% r0 [
- while (1){
4 [& V1 c( a8 N" x - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
* |) e! K' N9 X - //接收客户端数据
& U. b, F% {8 l - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
+ j! b5 b; n4 {2 s - printf("to me:%s\n",recvBuf);
' k9 [5 {! M# k. X1 ?5 s; O5 H - memset(recvBuf, 0, 100);& o! i" Z! N9 S0 x# C$ E
- }
- ]& e# c* `: d0 q+ O$ W6 C - closesocket(sockClient);
( l0 h" I1 U5 G2 s& I7 f - system("pause");, Z% U, n% C+ v' g) a! v9 C" P# `5 \
- return 0;
% F0 F3 ?5 A k5 Z D. E, Z1 W) h - }
复制代码 客户端代码:# l3 L. x* `' D4 e1 {5 A/ z
- #include<winsock2.h>' d8 \3 s& y' L S
- #include<stdio.h>
" ^5 x' w" X- L: [9 @& G% Z - #pragma comment(lib, "ws2_32.lib")
- y( J& q/ }0 l2 G: s, I6 ~0 j - void main()
+ ^2 T4 z! z+ w" H. P; A" _0 } - {" ]: D: ~2 C2 ~
- WSADATA wsaData;+ }9 ]( |8 r7 B7 N4 t" N. D, y
- SOCKET sockClient;//客户端Socket
1 z, q, |& d( s9 V" M8 v - SOCKADDR_IN addrServer;//服务端地址
5 @! _: B5 [; G4 {- I; V3 U - WSAStartup(MAKEWORD(2, 2), &wsaData);
& ], f# o F( Y- v; q: W( s- J - char message[20] = "HelloSocket!";. {* {: Z ?& |+ S
- //定义要连接的服务端地址
, D# h) X; f, C. e; E - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
, D: p+ T. I: ^/ F% Y - addrServer.sin_family = AF_INET;8 Y9 N, a, G6 a
- addrServer.sin_port = htons(6000);//连接端口60000 |! J$ T3 W( K$ {, D- h
- //新建客户端socket+ K' D4 t0 x9 P; {7 U5 T2 R
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
4 \0 x- P) ~3 m - int s = 0;
' I' y5 k( N% ^' Y$ P) m - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
. X* w. t" {# X$ b3 N
. s6 r0 o2 r3 F4 [7 b v3 L- while (1){
' v1 t% i0 C+ S w; V5 a" g/ q - //发送数据
* t. g0 C" o) W: [! Z1 q - int a = send(sockClient, message, strlen(message) + 1, 0);
- i- T; ~' F, v- \ - printf("to server:");' x4 [" J" \: ~
- scanf("%s", message);$ c' e b C: b$ z0 ?7 z3 H. h- H
- ; H# r2 f u/ H! j h
- }, w# T) A" s; Y2 S7 ]1 b2 h
- //关闭socket
# q( @' g W$ d/ u) I0 N - closesocket(sockClient);
, z% U S0 n, w; e0 E - WSACleanup();3 F! r. n0 ~6 I/ f; ^$ }& n
- }
复制代码 求懂的高手来解答一下。
9 i) b W2 b4 k, E谢谢了!0 J# [+ k: d \" [) j7 Z
8 D* I( K- O" W' O$ a% r& G+ }/ ~8 l3 p- j, `: N4 l" {& w
, Z$ X+ Y, l/ D O* p3 r2 _
|
|