管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。 }( x! b/ a& n: F3 {$ G4 W
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。$ l$ ~9 [, i6 l$ U
Talk is cheak , show me the code.
' x7 {6 W6 X1 X/ e- s. b: G服务端代码:
. m n. i/ ?6 a- #include<stdlib.h>8 j; R! B+ e; ~
- #include<WinSock2.h>2 l7 U* D: W, d9 S# f4 N3 h
- #pragma comment(lib,"ws2_32.lib")
i9 C8 v4 n. {) d7 o - int main(){
8 b; k8 d; Z/ p6 z+ Y* C% c - WSADATA wsd;* b/ l2 z% K/ G/ F7 H, E$ `
- SOCKET sockServer;& L& d ]9 j7 e3 |6 g- a
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
' |2 D0 A G( v5 ], i* b - SOCKET sockClient;
. x9 t& D, \( {0 M* B% @ - SOCKADDR_IN clientaddr;
) l }6 n+ @9 z - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
1 o" R: r% g) Y - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket% f3 b6 z) U2 t: \4 t8 _
, ~3 e- q8 b3 H5 F) {- " m1 y4 C" s( p6 O
- if (sockServer != -1 && sockServer != INVALID_SOCKET){, I, S0 w; a* y4 u
- printf("Socket has been created :%d", sockServer);
, E( w" N- i6 {% h& o$ M - }
- g2 s% o( c( e& W2 }3 w - else{
& E ^& V" I Q( n1 i' _% u+ u; ~ - printf("Socket create failed.");
, i* W+ E. A/ M; ^! _' T$ Y8 Z - exit(0);
% e% Z9 S- P* D, w( a - }
, R+ d6 G) T1 @# ~ - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
1 g3 |" Q2 S9 Q |- X& Y( Z8 S - serveraddr.sin_family = AF_INET;2 J2 s$ @' B0 D1 z5 y/ Q w
- serveraddr.sin_port = htons(6000);//绑定端口6000; `8 M" y/ m' w9 P, l' }
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));0 u( C3 ^ a$ U9 F% o
- char recvBuf[100];% l( C+ _' O! u2 O9 Q: o* A
- int len = sizeof(SOCKADDR);' A3 _4 c4 p/ G1 p
- listen(sockServer, 5);//5为等待连接数
/ s, ~$ z* X0 I0 s- z8 z1 E - while (1){# \) X, _! `* ]& r: T: J
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
# Z' N1 q7 W+ D) b3 C5 E - //接收客户端数据1 V5 N: s" s9 ?0 H' W$ `+ R
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
0 o* G' g" ?1 k# B. O; c - printf("to me:%s\n",recvBuf); u, W% z8 e5 o0 Q9 ]" K# x% o
- memset(recvBuf, 0, 100);# W6 z2 [: p$ G8 E0 @
- }. ]' H) j4 R5 |9 H; N( R
- closesocket(sockClient);" ]! p- t1 L# h* |7 M
- system("pause");8 U! n1 R% c, Y: _# z% \) j8 L
- return 0;
t( z+ P6 ? P @8 D8 B% J - }
复制代码 客户端代码:/ ]" I& r- t( a: }' E6 ?3 f: `
- #include<winsock2.h>3 h! Z [1 x9 f6 b% S/ d: v0 U
- #include<stdio.h>
8 I8 S5 \- W9 k - #pragma comment(lib, "ws2_32.lib")( u8 Q5 H9 s+ U# t% F. s: ~ X
- void main()
/ V0 h5 R" F H - {
! \9 _% d1 t4 m1 f- ~+ F9 c" x& A - WSADATA wsaData;$ p5 G8 C% d9 L0 t( ]3 V% b0 v
- SOCKET sockClient;//客户端Socket5 p, z" J2 x/ t7 n
- SOCKADDR_IN addrServer;//服务端地址+ `' v0 t7 P o2 Z
- WSAStartup(MAKEWORD(2, 2), &wsaData);
$ S+ s. }3 @* R! J4 i - char message[20] = "HelloSocket!";
9 N6 x) T g# \ - //定义要连接的服务端地址
& ^: s" y8 o8 p0 C - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
2 | N" H1 ^( [3 Z; \" q! a - addrServer.sin_family = AF_INET;
$ n( z3 A( w! Z# s$ N, [9 N - addrServer.sin_port = htons(6000);//连接端口6000
# _& p% |1 W" R+ @5 b - //新建客户端socket
1 f/ l- e' ]# C* E* P4 v - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
, b1 g Q. c+ Q - int s = 0;% I5 ?# I* ]' p1 i2 o! f: a4 }
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
; ?' U: Z8 z& K6 i7 i' x
/ {1 q8 M: [: w; s- while (1){9 a6 [! r0 K% x
- //发送数据
o! N$ }6 M4 R* p( L2 C - int a = send(sockClient, message, strlen(message) + 1, 0);
2 f( S# s( ?' o6 n) A3 } - printf("to server:");2 Z" X2 V5 R+ y
- scanf("%s", message);0 V$ ~* b }; ]0 m S2 S! u5 H
- % I6 b: l9 l6 k7 ]
- }
. _- N9 U/ _/ x5 h/ N - //关闭socket$ N& g; ~! J& V! O2 G
- closesocket(sockClient);" E' R! k# R/ y4 J* e
- WSACleanup();6 U# F3 [3 z- P. r; ? @
- }
复制代码 求懂的高手来解答一下。
. L5 D. n O8 a r2 j谢谢了!
# P4 G8 [/ d" X! Q p1 v( N) U- T5 u$ f) h! A y, D9 v
7 W4 Z* e" i( Y, t0 Z: h
' l) D6 R( [( s7 n, s8 l
|
|