大家好,感谢你的回复。
1 _* M: C/ C1 s# U* E6 N6 }8 E我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。( H1 G) b4 k- g( v
Talk is cheak , show me the code.1 M% A! U0 u, O' m4 ~! y, k
服务端代码:0 `, N+ R/ i: N" j9 d& L
- #include<stdlib.h>) V/ K3 X' f' R/ M' ]
- #include<WinSock2.h>
& b8 u& P6 ~! o" G - #pragma comment(lib,"ws2_32.lib")
- V3 q$ C' S b2 B8 Q2 m - int main(){( e9 B$ y1 f% ^+ c4 t$ [7 Q+ v
- WSADATA wsd;
" ?* v+ K8 J0 L- [! s/ @ - SOCKET sockServer;
! @) X0 Z$ c9 l - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
7 S: [! F# _. ^$ P" c; y - SOCKET sockClient;
- Y) \ H' V% f1 ] - SOCKADDR_IN clientaddr;
% N2 x! V" L# |7 Z. H) E - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口+ u, O$ v+ {5 K5 @6 @- D- k& d' j1 \
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
; u. M9 S, \* H, M* @! G, G
" `/ G0 n* X- k5 o- ) J1 G b& K2 w9 R s
- if (sockServer != -1 && sockServer != INVALID_SOCKET){& s3 x# H5 C% l
- printf("Socket has been created :%d", sockServer);+ X/ y0 t3 f8 x; F
- }
" i8 b9 M2 X: I& @3 l - else{
! U: Z* M0 |& S" } - printf("Socket create failed.");
* m5 }2 j/ Z+ w! {; J - exit(0);5 M/ _, o$ Z, Z- ]7 _* ^/ M
- }4 F4 ?0 ^5 p& C# C
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
( o3 x7 Z. b0 a- f - serveraddr.sin_family = AF_INET;
s/ N& I- i$ {6 ]2 ]; r% o - serveraddr.sin_port = htons(6000);//绑定端口6000
2 t. b" o5 y4 f- Q - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
( k: f! k7 m. H$ q. g E3 D' F - char recvBuf[100];. |2 h, Y8 ]8 Q9 U
- int len = sizeof(SOCKADDR);7 t2 n6 T$ a/ I4 [/ _/ }3 J
- listen(sockServer, 5);//5为等待连接数2 y6 [9 \" A* K
- while (1){
& U" P7 I* H5 ~) J - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
" f9 t1 s L; Q3 j0 M - //接收客户端数据" h' ?* }, T# b
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
& r$ w' I k; M9 t - printf("to me:%s\n",recvBuf);
4 {) l) t4 p$ S - memset(recvBuf, 0, 100);4 V4 u1 {( D% T8 H
- }
& S3 a) ?# z5 f) x - closesocket(sockClient);
7 T* X, a" B$ q) y3 f/ Q - system("pause");
3 i1 X8 H$ K5 Z - return 0;
2 i+ E) m F6 j! i1 p* s8 w# a - }
复制代码 客户端代码:3 o: X. O/ E0 j7 H3 @
- #include<winsock2.h>
3 C1 N8 M6 Z9 h, Z - #include<stdio.h> q0 w# M6 [* E4 n9 V* f
- #pragma comment(lib, "ws2_32.lib")
$ n* E2 s! J6 h - void main()
, G* @$ K/ `" W8 j3 s0 H. d( y: L - {# e" o- W" O* `
- WSADATA wsaData;. l5 c ]' ?* q8 N: d
- SOCKET sockClient;//客户端Socket
! a! H$ W, O( W* J A9 m; Q - SOCKADDR_IN addrServer;//服务端地址
, _& p* }6 E8 [8 c1 I- P - WSAStartup(MAKEWORD(2, 2), &wsaData);! w& g7 N6 X1 B8 c- E: o5 m
- char message[20] = "HelloSocket!";
# S; T; L) i2 I% R+ j1 t1 q8 m2 L" R - //定义要连接的服务端地址: a+ M! h# z/ h- R+ P; p5 o5 n$ I& X
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)' s" D2 V4 c+ T. _1 _: i( u
- addrServer.sin_family = AF_INET;& j* ?7 B# {) z
- addrServer.sin_port = htons(6000);//连接端口6000
/ P3 r6 e) u ^! H( E9 _ - //新建客户端socket: {; U* w. ?" j+ L7 r0 [% ?4 t
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);3 C0 ]. p8 N4 Z8 G+ L* F$ q8 _
- int s = 0;
3 e! X' [0 u- p: }9 ?0 l& _# w# N - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
3 y% v& u) l$ Q) V/ F# a
( _; l! W# {/ ?4 o' N7 {* Q. R- b8 u- while (1){, Q6 i' U- ]9 C7 x* f1 e! x
- //发送数据
. r; v8 Q9 K; |9 w, X7 U. l - int a = send(sockClient, message, strlen(message) + 1, 0);
4 W7 ^( x. A# U- A- [% q7 Q. O- I - printf("to server:");
9 x% o! [% G" m1 L1 G# z" W - scanf("%s", message);! y5 \+ m9 E% z/ _& e; l
9 m# L v' u$ F- } G7 v. g4 L! C- a8 U
- //关闭socket
0 c F0 b; V9 [# L0 H5 k - closesocket(sockClient);
8 E' k! j0 A" b5 T; i1 e - WSACleanup();
2 i; S/ v6 b3 N' V - }
复制代码 求懂的高手来解答一下。
9 c4 R7 _4 d, ]) m4 `# a谢谢了!
# w/ Y. i) Z0 [) Q+ T% `. u* d2 K) |, P3 l) _4 q4 o5 ?
8 M3 y' C8 ?& w1 m, ?, Y
8 L3 O U$ |% P' S, s! a
|