大家好,感谢你的回复。
! t& U" F8 _4 |7 O2 I我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
- z7 J) f# M6 j+ F$ \Talk is cheak , show me the code.$ m5 G3 x4 g' D+ _2 p
服务端代码:! D; E4 W2 q o$ B# J
- #include<stdlib.h>, Q5 t$ f0 [$ U1 j) N
- #include<WinSock2.h>
: A0 _$ V: h# a7 ~% [8 f% o+ B - #pragma comment(lib,"ws2_32.lib")
, f" [6 |. l. Z! k9 | - int main(){, g" v8 E+ P6 {. @$ B; R
- WSADATA wsd;
" K$ Y! @* k# S0 B' a - SOCKET sockServer;6 x d5 D+ t% I Z( u, {5 u# G
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
N) d! U4 ?/ g/ ` - SOCKET sockClient;
# j" S( U S$ @5 q - SOCKADDR_IN clientaddr;
( |; r; K: R9 b M, X* H% I - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
6 x% [3 t2 u, k# E" n9 c3 V, ?2 t - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket9 s" g/ z/ z7 ~/ P2 n, N* G
- 5 o/ W! L- Y4 v& D+ Y& V( b# L
V5 l+ ~7 N2 V7 ^, S, P' x- if (sockServer != -1 && sockServer != INVALID_SOCKET){" j0 m2 c4 c/ L
- printf("Socket has been created :%d", sockServer);
8 P% b4 D" M3 ~, e! H - } p2 ?7 L4 k$ y9 Q
- else{
3 O4 W7 t( a/ g9 ~0 c r - printf("Socket create failed.");' M: Z3 P+ b6 K& I3 \4 c
- exit(0);7 c4 o4 E& [+ u9 V: K: M) H( ?
- }2 X1 ?7 Z6 _ q- H/ N
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
+ V9 w8 \4 [7 U% \7 e" m - serveraddr.sin_family = AF_INET;
4 U/ e1 ^# s/ v1 R' G- Z4 E! i - serveraddr.sin_port = htons(6000);//绑定端口60007 F9 d6 I' `7 Q* s; ]
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));0 z1 z6 X2 v% R
- char recvBuf[100];
+ L, l9 F/ N" k* F) s. k/ k$ u - int len = sizeof(SOCKADDR);' ~2 n9 W* h6 }0 f- k' b2 G
- listen(sockServer, 5);//5为等待连接数
( c/ ]- b: r" |& V7 O7 l - while (1){
; o2 e9 |" L9 R& K, L, @; k4 d7 O - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
( _" g4 R- V- ?3 ~3 ^ - //接收客户端数据
( n0 V0 Q/ l& [* V( }/ A - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);6 S, j2 X. I6 h! p4 \* q, h( Q
- printf("to me:%s\n",recvBuf);* v4 k. X1 M' t6 Z2 A; u% S
- memset(recvBuf, 0, 100);
6 p Y. |8 J1 @9 l5 I2 i* G1 @: c - }
+ u: L- B& y3 [" `3 `4 [/ | - closesocket(sockClient);/ r3 _0 d, ^' e' o/ a
- system("pause");
9 A! K8 @ z$ o& N& f - return 0;- H" Z' F$ d6 T: d
- }
复制代码 客户端代码:
% }4 r' ^* g8 I( ]- #include<winsock2.h>" Q& U5 _/ ?7 `3 I( R
- #include<stdio.h>! o+ P& G$ S/ a# U7 c
- #pragma comment(lib, "ws2_32.lib")$ H7 Y1 j4 b' q: i, N
- void main()
, Y) W& d! @- o5 w - {0 q; X' ]! I* S0 r- J$ L# t, i, J. v
- WSADATA wsaData;3 s. Z9 v0 b' a7 M
- SOCKET sockClient;//客户端Socket
P% K, ~3 e( i, ?# d6 Z+ z$ o6 u- P7 R - SOCKADDR_IN addrServer;//服务端地址
$ h6 X Z/ V+ D9 F2 h - WSAStartup(MAKEWORD(2, 2), &wsaData);) ^( T8 [2 k1 A) h$ n
- char message[20] = "HelloSocket!";# W" g9 C6 R4 j- U$ _" z
- //定义要连接的服务端地址" M, K4 I- {! L
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址). F( n& [( o3 R/ _# s( i7 w
- addrServer.sin_family = AF_INET;. F8 Z& c3 H1 U
- addrServer.sin_port = htons(6000);//连接端口6000
- q$ I% U: K/ `0 N+ M - //新建客户端socket7 K# [4 P( t( u0 F: q. e
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);* ^( o% Z8 M3 A! e1 O
- int s = 0;2 x7 i" G+ q3 }
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
! ` c# C. u) q# a v: n
2 E8 ~% F' B3 _$ A" B" e$ L x- while (1){
7 n6 O1 E9 |( f- L - //发送数据3 h0 n2 r8 `; L% c! |) Q! F
- int a = send(sockClient, message, strlen(message) + 1, 0);! B8 V) K# d" p0 K
- printf("to server:");
$ L% z5 g* ^" X: V5 Y4 x - scanf("%s", message);; N( a* l h. g* M) q
* Q3 U; p; G A- }1 r) V: q: W+ v9 P0 [0 |1 F" x4 L! ~
- //关闭socket& l4 n* l) ?9 k, n; X
- closesocket(sockClient);3 U! h J5 O/ b
- WSACleanup();6 E6 o* ~$ F) |; ~ Q" B) ^: X2 s
- }
复制代码 求懂的高手来解答一下。
! l* P/ r* Z7 l y# I" q谢谢了!; |) Z' d, E/ f- f: P
) Z7 [! a( A! f R' @
0 M) }! g( M+ G- o* ~ F2 O9 g- ~7 S, q
|