大家好,感谢你的回复。( N: |( c4 V2 ^8 N+ a
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。% K0 r5 \' E9 o' G
Talk is cheak , show me the code. l# O0 a* P6 V# p
服务端代码:
p. n6 B) X& ~- #include<stdlib.h>* s' K/ q0 } s3 G0 A- Q: X
- #include<WinSock2.h>0 J& Z$ x* |# ]
- #pragma comment(lib,"ws2_32.lib")* S& u% a/ s7 d/ [
- int main(){9 g% b) u/ c8 ?. P/ t7 F
- WSADATA wsd;4 z5 f" T; x9 W$ m. W4 c
- SOCKET sockServer;
9 g4 U) q* m" U) k8 {# t/ Q - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
, H7 F1 q" T* \2 ]5 \. P5 Z - SOCKET sockClient;* _5 q- s6 E7 @' @, [/ E
- SOCKADDR_IN clientaddr;
6 Z* K5 J) |6 o3 n& `+ a% k) X - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
/ _; `% U. L$ M6 j' P+ y/ C! h& t - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket' R8 D' B6 z; y) s% V
1 _! u+ h" m% Y, { O+ a! ?
% B- D# W7 @ e- if (sockServer != -1 && sockServer != INVALID_SOCKET){: |% x' i. W8 h; R, X0 T
- printf("Socket has been created :%d", sockServer);5 I! A" c4 d: h1 r/ O! ^9 o
- }+ @; O1 `+ R$ L0 l/ W5 z
- else{3 C( N9 y Q: i0 v" h
- printf("Socket create failed.");8 M4 u$ w3 J b3 _5 i, A7 R
- exit(0);
, d' z, A. F: m - }8 Z1 t1 H( u4 M: a8 K; [! S# X
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);5 g+ i# m0 L9 U8 r% y$ l
- serveraddr.sin_family = AF_INET;
. c# T4 g9 n4 `0 `' X( v - serveraddr.sin_port = htons(6000);//绑定端口6000
5 v5 w$ f3 F% s# ` - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
" m1 f3 H3 u' l - char recvBuf[100];
" d6 f( l# U" K$ O) M - int len = sizeof(SOCKADDR);7 V( n; O( P% ]' n+ Z4 J
- listen(sockServer, 5);//5为等待连接数+ k2 E4 k: k$ K# {; H: k
- while (1){' `$ ]# z8 x8 n t
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);7 A) I9 z! I6 s: U8 m* M" G
- //接收客户端数据" n- B" y! ^8 K' m- X' K
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
. U; L9 ~8 x8 o7 d6 ` I - printf("to me:%s\n",recvBuf);
" e0 s- S. P7 M/ s$ C - memset(recvBuf, 0, 100);. s' {0 b- P. N% \+ c1 W9 N8 V
- }
9 f5 O& {( `, K& m8 A - closesocket(sockClient);
: q t) C) F [3 ]$ L0 q - system("pause");/ ]* j; Z* \* m3 D
- return 0;
) h6 m6 O5 b- H0 Y& ~9 Q& t - }
复制代码 客户端代码:
( T7 R1 [5 d( M% M+ a- #include<winsock2.h>/ ^: P. C1 U5 D% s- s$ Z
- #include<stdio.h># ?$ W6 c2 t4 h+ F' g q. @! [! k, S" Z
- #pragma comment(lib, "ws2_32.lib")6 R- B' b" P$ k5 D3 G# {
- void main()& c4 f" n" d& j5 p
- {
9 G7 U! h( v5 e9 | I" a3 G, y6 [ - WSADATA wsaData;! b" _$ c6 F) g2 A. D! ?
- SOCKET sockClient;//客户端Socket
- Y8 @! ~4 ^) q4 x' ]. i - SOCKADDR_IN addrServer;//服务端地址/ u# y; d( o3 C" |# n
- WSAStartup(MAKEWORD(2, 2), &wsaData);
5 C$ ` ~8 b" N4 L" h( }$ [ - char message[20] = "HelloSocket!";+ p8 D, \7 W4 _) E! D
- //定义要连接的服务端地址
5 A4 ]7 [: I) E- u# [- {! c/ P* s; Y - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
: i3 J& T. v q; ?# h: [ - addrServer.sin_family = AF_INET;6 X5 K/ X u3 Z* l, c9 w
- addrServer.sin_port = htons(6000);//连接端口60007 E' T: j5 R6 ?$ G7 f. P: v+ Q2 I
- //新建客户端socket
, B& I3 J0 U0 U5 F2 g; \$ [5 ` - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
' m+ o. _9 V9 v4 A5 L - int s = 0;4 ]9 Q* [: R0 ^. d
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
' {% [' h$ \$ X7 n4 f& l7 j' R
0 ^6 f% S( V8 O- while (1){
% j7 _9 Q* a" [( B - //发送数据
, l& y5 Z8 ?0 Y2 Y - int a = send(sockClient, message, strlen(message) + 1, 0);4 E( E( J7 { Z( F. m, V
- printf("to server:");$ g0 S+ L0 L; ^: Z1 Y9 K" v* X
- scanf("%s", message);
* e! r0 c1 _. t7 ^
6 L/ N d# j5 l8 h- }( _0 O! ~* x! F9 L' D2 b
- //关闭socket+ r( x# p6 O3 z4 h, K1 s
- closesocket(sockClient);
: w; k' Y; j. R7 G8 |) [ y. E - WSACleanup();) u. s4 F5 |; L K2 E% o$ o0 J
- }
复制代码 求懂的高手来解答一下。/ o+ a! }1 @; i
谢谢了!. P# r9 Y6 Q$ |/ X- J
& b1 ?/ A I3 B1 w5 M! q1 E" P- V4 q% q \4 h# v: O
g# a* A9 ^: D
|