大家好,感谢你的回复。
# Q9 o9 j2 ?5 D+ f1 z8 A5 d我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。4 w/ a! q9 v7 M( y
Talk is cheak , show me the code.
$ u! }. G% u, E" S3 h$ J服务端代码:5 a# u- r" J( q
- #include<stdlib.h>
/ D1 L/ C6 r4 N/ f2 z - #include<WinSock2.h>
7 X T1 i3 a! L# x9 {" d - #pragma comment(lib,"ws2_32.lib"): }. H! m) `- [
- int main(){( E, [2 j2 W% X
- WSADATA wsd;& u! I! A2 s6 \: f
- SOCKET sockServer;
6 J/ g4 Y9 H3 M! P# Q - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
5 E. p$ H- U1 @% X' ~$ ?8 K! \( s - SOCKET sockClient;' a8 s- e/ l/ R' ?) I3 u
- SOCKADDR_IN clientaddr;: k5 D4 y, h: ^+ k& T3 m* _3 S" o
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口) _$ C4 _& R9 m9 E% u; Z
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket; G2 A) ]6 E- s2 R1 a
2 `, P' ?" m0 r* a
: ^4 |7 r2 S3 G/ u- if (sockServer != -1 && sockServer != INVALID_SOCKET){( z1 c" W/ A( M; ^2 T' S/ z; z
- printf("Socket has been created :%d", sockServer);2 G8 R' z' b2 K/ I; D" w
- }
\1 S% |, _% L F/ O* b - else{
8 M) z# I6 C; d& X! u% E - printf("Socket create failed.");
5 q {. Z; z3 b9 r8 t# e1 P - exit(0);
5 n0 F5 i7 K5 _* x - }
# \9 `1 v0 r. B5 Z0 }2 U6 F - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);" z9 l9 q+ }" y+ o2 y' {
- serveraddr.sin_family = AF_INET;5 b. R+ o/ J/ f: H% g: }
- serveraddr.sin_port = htons(6000);//绑定端口6000
' o) o# l1 p0 D - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
* H' @7 h/ j: p0 i( s - char recvBuf[100];7 i2 J Z' e9 z2 ]# {, F! P
- int len = sizeof(SOCKADDR);
- l- e; x8 u6 s1 [' _6 m- m+ X O - listen(sockServer, 5);//5为等待连接数9 ~4 H1 T" y* }! T3 }* w8 {$ H
- while (1){% t, H4 e, h. j/ ~7 G) _
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);9 @- y" [, z6 c3 a# F8 h
- //接收客户端数据/ v+ M; Z, i* }8 \6 O; K( A9 J
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);) \/ @2 f9 t/ H- K
- printf("to me:%s\n",recvBuf);
$ b7 k3 e8 _1 D3 p* t5 ^+ k) s - memset(recvBuf, 0, 100);2 o% ]$ X7 I3 T. q- r9 c, {. U# x
- }+ j- l- z, V. F0 s' j5 o
- closesocket(sockClient);
- Y. L' U8 Y5 ~' C% L( V - system("pause");1 u9 m4 [; T1 k8 D
- return 0;# F% [, R) M- |
- }
复制代码 客户端代码:! j" j2 Z) Z! |& E* w* ~
- #include<winsock2.h>
: c/ f% _: e2 H3 M - #include<stdio.h>" K0 U# c: x" S0 @5 ]
- #pragma comment(lib, "ws2_32.lib")
# N( b" n! X! H - void main()' w9 d: E1 b5 Z* p
- {
! ?* Z3 d V, P$ a+ f8 h - WSADATA wsaData;
: p0 ^; O2 Z% _1 {3 [. k0 K" m - SOCKET sockClient;//客户端Socket. [$ v. Q Z/ d4 m
- SOCKADDR_IN addrServer;//服务端地址
* s2 h; V- n) {$ a) S' p - WSAStartup(MAKEWORD(2, 2), &wsaData);
0 X P, K* d7 O" b; { z" q - char message[20] = "HelloSocket!";
: ^; Q; r' Y) E5 ?3 z t - //定义要连接的服务端地址 C7 T( c5 B2 @( P& Z" i8 H3 }
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
6 m: J. a7 J. I5 ]3 m4 N - addrServer.sin_family = AF_INET;
8 W8 R2 b4 A ^" B8 |$ L' s1 }' y - addrServer.sin_port = htons(6000);//连接端口6000
! N3 J: ^0 K; ~2 V( S: L - //新建客户端socket+ T9 K! r3 _; m; ?' C6 L
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
2 {# G& x+ }3 y/ \& f4 Z+ | - int s = 0;
5 L( @* p4 Z% j - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));/ P3 ~/ p% q# A4 v4 k4 Z8 k G+ x
- - y8 [& ]! b( A3 i4 B3 F/ w. s& }6 P
- while (1){
6 S9 J+ u* k% d% L' f% [ - //发送数据) y l3 m" [; O! ]! g' p5 Y* }
- int a = send(sockClient, message, strlen(message) + 1, 0);* V1 O1 e1 F- ?( j
- printf("to server:");$ f1 I1 }) t: f- g P
- scanf("%s", message);
; M: q9 p: f f) ]" ] - , h- c( ~% S1 ?: `, T
- }
; F4 e0 H1 r/ P - //关闭socket$ k, }1 l" h' d- H
- closesocket(sockClient);
& x/ W0 E3 g+ r7 ~4 \) R+ G - WSACleanup();
3 Q% l. n3 E/ [4 B% b/ k - }
复制代码 求懂的高手来解答一下。/ [- r& I6 A7 N4 f- x. o; N0 u8 W
谢谢了!
: E* \9 A! G; I7 y! H( I
; e4 D' L9 f' y8 F- B* m4 }0 T2 b N9 r/ |. V: O* f
* M7 i3 @* n/ V1 [+ e* t |