管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。- u# ]5 X, V( G5 N3 G5 a& E
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。: \ Q1 H1 Y ?/ ~, C3 _8 H
Talk is cheak , show me the code.% j$ i Y* N( j. i" U; D
服务端代码:6 p0 Q5 l7 d, e* _3 N2 w4 W W. T
- #include<stdlib.h>7 m1 B) e# W" Y6 N6 k
- #include<WinSock2.h>
; c( A8 R- [* r8 Q: ] @ - #pragma comment(lib,"ws2_32.lib")) a* u4 Z0 _6 l& p+ ]
- int main(){# J" R0 _/ _% n! d6 p
- WSADATA wsd;
* G+ _4 Q( z% A - SOCKET sockServer;
1 [1 E9 [# B$ ~" q) o - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
+ q2 D5 E2 x; b; I) ~1 c - SOCKET sockClient;
+ v0 _' E& f9 \2 n1 n - SOCKADDR_IN clientaddr;$ L6 H( C( Q5 @5 M, Y# n! H5 F6 O3 Z, n
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
0 e0 W# |3 S; x5 T7 ^+ h- Q( _ - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
/ t2 `" h! c2 D5 A5 `6 W2 W
$ p- Q; N. a/ M' w3 W
" ~" n+ W! M5 P1 l- N$ H0 o% x- if (sockServer != -1 && sockServer != INVALID_SOCKET){
! b; O( ^( P( V4 B) A' j9 s* b( s, m( g - printf("Socket has been created :%d", sockServer);& `, N5 N/ s0 x4 P! ^5 E' }
- }; T- ~0 p# \, k
- else{
) C) B' b; q) `- Z - printf("Socket create failed.");* j9 k2 J% ^$ i% ^0 [
- exit(0);
8 I4 |% K9 c2 F. J1 l$ z, q- n, Z+ ^6 ? - }
& J* R% k4 n" Q - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
! X: U3 i# B+ Z; _ - serveraddr.sin_family = AF_INET;
) N) s& c/ h, `2 q - serveraddr.sin_port = htons(6000);//绑定端口6000
& m# Q4 h: p: l4 Z/ z- i - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
: g9 U9 |' l) Q - char recvBuf[100];
- q" b ^% A% } - int len = sizeof(SOCKADDR);, \: U/ d/ A/ ]9 l; x% G+ m6 A
- listen(sockServer, 5);//5为等待连接数 j2 M1 n5 I/ {7 y% R
- while (1){
9 \. z- ^. e0 L- ? - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);+ w: Q r: s! }) `" F$ X
- //接收客户端数据/ Z* F% \8 V+ B- Z6 {0 H
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
C2 L. A+ e F6 L6 S( L+ k! s - printf("to me:%s\n",recvBuf);
: s. h3 D; X- S: j - memset(recvBuf, 0, 100);
) U6 Z) m$ \! M% w" g - }* ^2 ~# u$ _1 B; ?5 Z4 M# G, P9 p7 o
- closesocket(sockClient);
. Q' O+ V+ B4 |* I - system("pause");* z, _2 O5 d% g) m& V/ v
- return 0;
3 i" J$ C9 }- i- t - }
复制代码 客户端代码:
' F/ J. u9 n& V: f4 R. E. [7 F/ X$ P- #include<winsock2.h>
1 \& h8 U8 j q5 z - #include<stdio.h>+ S+ r+ N5 |% T+ W% M9 h5 g
- #pragma comment(lib, "ws2_32.lib")
; S, w+ e* s3 K! M& r - void main()
2 u( M) I+ m. i! v4 p8 A2 W - {
' j3 R. R' V! {4 O2 W( @$ Y! R - WSADATA wsaData;
) {/ `$ o% Z2 ~/ U* v' s - SOCKET sockClient;//客户端Socket
5 c# G3 d! E1 a3 ~ - SOCKADDR_IN addrServer;//服务端地址! P+ ^) @2 l8 n3 h& n* K4 V* X
- WSAStartup(MAKEWORD(2, 2), &wsaData);1 d$ a2 c4 D. T$ L* e
- char message[20] = "HelloSocket!";" {8 {' I+ v/ _; \# Z0 N% K& v
- //定义要连接的服务端地址5 O {; j" E2 O* u% v
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址), f1 M# r% q) S1 J& X
- addrServer.sin_family = AF_INET;
: j) ]% R5 m* T# H6 v+ C - addrServer.sin_port = htons(6000);//连接端口6000
: t7 p" n$ A+ B! i - //新建客户端socket
% Y6 I- y F2 B - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
7 L5 }* t1 T7 c; D - int s = 0;. ~8 Y+ D l6 B, _7 Y) {' @
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR)); B- f! V% B; w5 P2 r' D9 d
- : `# R2 \' ^7 G( A% d5 D* |) G
- while (1){
0 z3 Z; n8 g& t) [ - //发送数据
2 Y* `8 h8 F7 O1 P - int a = send(sockClient, message, strlen(message) + 1, 0);. C! i# P" I8 s& |
- printf("to server:");
$ V) y$ A1 S$ l8 d - scanf("%s", message);2 H' h0 y( F0 G) D
+ N) @+ h6 `' E8 |2 a- }6 B* Q% f9 Z7 h2 N- x
- //关闭socket9 q1 M! H4 ?8 S+ q5 R0 K
- closesocket(sockClient);
+ L; c/ e4 \2 | - WSACleanup();
7 R$ P0 U3 J) G$ r0 }9 [ - }
复制代码 求懂的高手来解答一下。
' v1 X, U6 P+ y6 i2 ]) r k谢谢了!
8 U' ^5 E" h1 |# P9 S
* W" z% @' q' q% M) ?% g9 J a
% Q# _7 X4 \1 w5 P4 t$ ]8 x! S: h) U& r
|
|