管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。. C$ U7 H4 q* c2 h" {% M+ k) N
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
; V0 h- m) T0 c' w9 h, Q# @Talk is cheak , show me the code.
% ?( }% A% j! ?) e服务端代码:/ ~$ w; T2 d# Z4 C/ J: u
- #include<stdlib.h>. W$ B8 o: X+ ~! e9 E D
- #include<WinSock2.h>, w$ d' q1 p |8 S7 S
- #pragma comment(lib,"ws2_32.lib"), O0 S9 v) X+ D0 B; ]
- int main(){* E* `& d5 a/ t# ~
- WSADATA wsd;
: f& s! t" J4 B4 J/ Y, B7 L( h - SOCKET sockServer;5 U" h/ M/ g+ }
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
- u, ^' t8 r N L( b7 T, J - SOCKET sockClient;
) t9 A- U, m7 o$ ]' Y r8 N5 } - SOCKADDR_IN clientaddr;
5 c- @- e, n" T2 Z - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口9 ^7 M3 h" e& R
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
6 h) H4 T$ p5 E2 g8 _% w
. Z& ^' H" u! E) B& |
, N9 \6 R4 C; k0 \* o( h. k- if (sockServer != -1 && sockServer != INVALID_SOCKET){! J& Q% I4 i7 y' v& C
- printf("Socket has been created :%d", sockServer);5 x+ t7 e0 n" ~$ }
- }
6 l6 L2 Y' F8 q. G- E3 I% ?% a - else{
5 o f1 X- C. x, \- h - printf("Socket create failed.");
( c2 l ]5 z0 g( z7 @) n! b - exit(0);: k( Z/ X5 X. z& w
- }. d3 P1 x4 O( [1 y- k: u
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);0 @/ I4 |$ h) ^7 \ D1 ^2 u
- serveraddr.sin_family = AF_INET; X9 S5 t: ]3 ?# n, z& t
- serveraddr.sin_port = htons(6000);//绑定端口6000
* }# u& I3 c+ f0 o - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));' Y' f0 H1 r' t; S' U% L" G
- char recvBuf[100];5 j! U3 ~) i3 v4 X" |
- int len = sizeof(SOCKADDR);
$ d! O) t. i- }7 ? - listen(sockServer, 5);//5为等待连接数3 f5 Y8 R: \2 ?; V* g, N
- while (1){, @0 w5 g; z3 U; ?
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);" S9 P# T2 l% ]* b: s' q7 g
- //接收客户端数据
9 P; D# d1 B( P- l( y) F# T - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
- A) X; @0 T% j( g: m" C - printf("to me:%s\n",recvBuf);! N% E" U& c* r
- memset(recvBuf, 0, 100);
9 X% |; y# F u1 ?6 B - }9 U2 |3 R2 P( @8 T
- closesocket(sockClient);* x* L" N5 @: k/ g7 D& V' p( N
- system("pause");
5 [8 ?& x& m8 K+ h% W" W - return 0;) x! c3 n8 E8 C; P* c k( p% O; d
- }
复制代码 客户端代码:1 y+ f' e7 @ n
- #include<winsock2.h>
- v: [4 v. E8 ?+ k - #include<stdio.h>; w* L" G( m( z1 y
- #pragma comment(lib, "ws2_32.lib")
) a$ o1 [$ f. R - void main()4 h8 T: |/ `" y/ P" `
- {
9 u- P5 T3 j. P* p+ C, q f - WSADATA wsaData;
/ e1 ]+ z/ o8 b3 k - SOCKET sockClient;//客户端Socket
) \. X. z2 ?8 o: z* F$ z: w - SOCKADDR_IN addrServer;//服务端地址( y" [; N9 n1 ]- l
- WSAStartup(MAKEWORD(2, 2), &wsaData);) z! |9 R! {9 K& Z4 R# I1 t
- char message[20] = "HelloSocket!";
+ _0 ^: v6 ~8 I$ |2 W3 Q/ W8 N9 ^. D - //定义要连接的服务端地址
1 w: K& ^: ]. O* o" A - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
9 B0 ]3 p9 y0 Z/ D - addrServer.sin_family = AF_INET;
, K6 U: L! N: K: h% p S) [ - addrServer.sin_port = htons(6000);//连接端口6000% D5 \8 s6 C: E1 i2 f1 \4 N) o
- //新建客户端socket
% P$ S: z& B2 G4 y! O* ] - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);+ e, k- t$ d% i. Y; C! C1 V
- int s = 0;
. H& U/ `$ R8 P; _) ]& p - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));8 k7 I7 O/ H$ N) U( u. @
- + n7 h$ J* I4 y' t0 i
- while (1){$ b, n" N3 U' o8 P) T U" m2 U; V
- //发送数据
2 \) z/ L( F# f) {. D) j - int a = send(sockClient, message, strlen(message) + 1, 0);
: o4 Y. H) N, F) c7 {8 m - printf("to server:"); e) h, W: v4 Q0 v0 v+ x
- scanf("%s", message);
* N2 s6 \8 P o- C& Y* Y! }; M# o9 ~
+ |; ^, p+ h6 ]/ Q% Z- }
[- ]" ]$ E5 N. R9 f7 Z - //关闭socket
; ]. ~- Y6 W% a- l6 X% z - closesocket(sockClient);2 G; ~) ~9 Q* b$ P) c+ n2 H7 @
- WSACleanup();
9 g; h; [3 ^) g8 N& y - }
复制代码 求懂的高手来解答一下。0 Q/ j7 R) a1 I: _
谢谢了!
' p5 p* p: ^% f9 _' v) o3 h- [( t5 z5 Z. [8 o; q8 L* Y. o* D
/ n, E, k' q. q2 ~! D' s
' J! Q/ l# E5 U$ }) M L |
|