管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
+ T8 G" |0 U3 q" t/ J, A3 q# k; ]我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。' l4 T7 U" T# d6 e, d2 T0 D
Talk is cheak , show me the code.7 j2 q. Z p# A
服务端代码:
) O5 }5 ] u" f4 T8 I# E- #include<stdlib.h>! y7 {' X2 L) Z0 L8 D* G+ H% B
- #include<WinSock2.h>
" \5 B/ h0 T# M) Z - #pragma comment(lib,"ws2_32.lib")) b, o1 ^7 }9 L& q' i. p9 `
- int main(){0 |* g* B. [5 f# Q1 G. d* X
- WSADATA wsd;
K' a! p2 D9 b, J7 A# m& L5 M - SOCKET sockServer;, @. r% L9 z' w! U7 `! a) x/ o
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
+ W# @, S; c) m- W; r# r - SOCKET sockClient;& Y! ]1 o U1 F$ S1 D
- SOCKADDR_IN clientaddr;
) N5 L( N1 K, c1 D - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
( t( v F R9 w2 W - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket; e/ L* v" @6 V/ S
- 3 a9 O( L9 G; h9 E5 }
- $ M+ Z! J0 D! c+ `% a
- if (sockServer != -1 && sockServer != INVALID_SOCKET){' ^1 E* }+ p$ h! S7 D
- printf("Socket has been created :%d", sockServer);
, v+ D2 [: R! o) x& b: X* O - }
* G) B, f2 Y7 V: D# _' o( I - else{7 ?# |* ~& {+ h
- printf("Socket create failed.");' G7 I6 w/ B! y9 C1 ^3 y* w# s! D( Q
- exit(0);
2 l+ ?5 z7 p5 {4 {% C+ V/ Z - }
6 i5 S. d2 d6 R - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);! P$ |# E+ P1 X$ y ?! t0 t
- serveraddr.sin_family = AF_INET;, x9 m, E- G8 H9 {
- serveraddr.sin_port = htons(6000);//绑定端口6000) L! \! g5 c+ C* p( V- `3 j* V
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));$ w; i" ^& `2 c' d/ ^! q
- char recvBuf[100];* v& M Q! h$ D4 ^/ x) G; t# S1 D
- int len = sizeof(SOCKADDR);
2 ^" C9 H3 X6 D, I( v$ m" {/ r - listen(sockServer, 5);//5为等待连接数
$ f( E& e* h9 y- Y4 s. r2 b - while (1){
5 T/ w. S5 [- | K* ~1 l- J9 T, q - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);; f$ u2 t- g! h' o8 _
- //接收客户端数据 d3 c2 I' G; D m
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);# P! a1 k2 z: b
- printf("to me:%s\n",recvBuf);% R G1 Z E9 O4 H7 l
- memset(recvBuf, 0, 100);; T: B- {5 ?3 u/ P2 a
- }
' Q, |3 q) l6 b- A2 @% d - closesocket(sockClient);( p0 k% s. H, G/ L0 @
- system("pause");
! R8 M, O3 `" o5 M' V" \+ e6 e! N" m - return 0;
# `$ m3 O0 o5 z) x7 Q - }
复制代码 客户端代码:6 [) r& D: \ O/ }9 L0 c! ?2 h a
- #include<winsock2.h>3 {& [6 ~8 [" r+ B
- #include<stdio.h>, \$ B" x1 U, b' o6 ]+ W
- #pragma comment(lib, "ws2_32.lib")
! k) I8 A) m9 c( H% h1 D# ~, \8 ] y0 p - void main()) B0 R4 O6 X! S4 y+ D
- {
5 x# \: a1 ^; ]3 z; C- s3 D5 \ - WSADATA wsaData;# x! U. e- G, ^7 n
- SOCKET sockClient;//客户端Socket8 I. n O+ m0 C" D
- SOCKADDR_IN addrServer;//服务端地址2 [5 C; S9 |2 _# S$ z* s. p
- WSAStartup(MAKEWORD(2, 2), &wsaData);3 z9 @6 m( Z3 O0 T; D7 H
- char message[20] = "HelloSocket!";
7 k3 \; V4 O; _8 K# n L - //定义要连接的服务端地址" {0 b- R) R! W% Q3 e. |- m
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)0 z5 c1 d. }1 r: T3 N8 k
- addrServer.sin_family = AF_INET;& G* M2 |' h7 `2 q3 i
- addrServer.sin_port = htons(6000);//连接端口6000
" u: v% S/ r" C( H - //新建客户端socket' L' u' h i5 D* {6 \
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);9 K; s3 u* C! ]" Z! ?9 J% x
- int s = 0;; K6 V9 ]; {2 I4 a# a& t
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR)); E* L& @5 J3 E1 `# D$ L
- ! T/ L, ]+ o: h- ~+ f9 j& c: l
- while (1){
+ F8 D0 K; A- Y, B - //发送数据
. N( `8 n6 [4 d- F - int a = send(sockClient, message, strlen(message) + 1, 0);: r" @1 ~, ~4 K" r0 o" b4 G
- printf("to server:");( w( b T2 F! K! ?; `/ b2 i3 o) M, j
- scanf("%s", message);; F: k, i' @ \3 a
* C3 N5 \1 |9 h& N8 M& ~9 F- }
4 L. h8 F8 I# ]; G4 Z$ D# D" J - //关闭socket7 m7 I/ x1 N% }
- closesocket(sockClient);
$ b: P$ k6 e) _+ a! k1 J3 ? - WSACleanup();
) P( x: I, g$ c9 f4 o - }
复制代码 求懂的高手来解答一下。
8 [# t7 m" q, V) ]谢谢了!
' r% X: {' ], |- L+ o6 ~% Y
8 F W! V# h5 h, A" e0 x- ~9 P, ?: a, e% r6 m% C
2 u2 s- X9 Q7 ?- L3 G4 j
|
|