管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。4 N# W! X- V1 S$ P$ n" k& B/ l5 ~
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
+ O5 n5 x' b$ Y! _, u5 t6 b5 LTalk is cheak , show me the code.
0 Q1 x' y( D/ t8 |- K服务端代码:
) _* {# t/ G0 J- J- #include<stdlib.h>
7 t6 T8 f8 s7 Q( j9 |2 } - #include<WinSock2.h>/ `- k$ G1 E3 n* s4 b1 s
- #pragma comment(lib,"ws2_32.lib"): s5 t, W( U& @- O$ o
- int main(){
8 A% R& [) Q: f B; ?/ `; [" m - WSADATA wsd;
$ |. \1 Q0 P" ]) t) t - SOCKET sockServer;
8 b, P. z7 p# ~& Z- T7 T1 H - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号9 t+ P$ g: v6 L* A. t$ a
- SOCKET sockClient;/ W+ C! N: i1 `, r2 B
- SOCKADDR_IN clientaddr;
1 \' H5 B8 W3 M& j - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
; T# h' ~( v2 Q+ |' K - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket- m# L. g0 G& z2 k( y# R9 o) {, o
/ V9 ^8 B. d$ I L
2 P7 p4 b, j+ f( \- if (sockServer != -1 && sockServer != INVALID_SOCKET){+ \+ N( L* q8 y: r* v1 a
- printf("Socket has been created :%d", sockServer);
: q: j8 r9 C- H( ^' N) w! b - }& C+ x, c, |! V+ t/ }
- else{
; }: ~, q- ^$ u! q - printf("Socket create failed.");4 ~+ ~; G* i4 s9 n4 q
- exit(0);, }! |+ D3 e% z. r( r% y
- }! A# R4 g- W+ ^. ^# l
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);: X3 Z$ L+ }: g" Z9 t3 c2 m0 s
- serveraddr.sin_family = AF_INET;
7 L" S% x3 |$ Z( C - serveraddr.sin_port = htons(6000);//绑定端口6000
; k3 X2 J( b2 B - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
: h0 T( C; E# [ - char recvBuf[100];
6 k5 ?! C9 R% [- L+ j - int len = sizeof(SOCKADDR);
+ w/ A7 h$ L$ g1 P; `' r - listen(sockServer, 5);//5为等待连接数
) D" L4 K2 r( B2 V - while (1){8 |' v; W, W8 m+ s; T
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
9 @# D( ]6 I) Y! L, o - //接收客户端数据4 K3 s |& E) S1 c7 U$ f
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);# s5 C6 [' H. D) i. F. Q) V8 Z4 _
- printf("to me:%s\n",recvBuf);2 k1 t& i- r- c2 c# {0 Y! H s
- memset(recvBuf, 0, 100);; k9 o& G5 X3 e7 @+ F. k4 M
- }
# I1 N7 z5 v* m9 f - closesocket(sockClient);
5 n T0 [) g) M; J9 m - system("pause");3 z4 S0 X8 w8 H( R5 _# k% r
- return 0;1 \ T* }1 o) X* o! v: U
- }
复制代码 客户端代码:7 d) Y/ M6 L; m A, T, s
- #include<winsock2.h>
) s7 k0 H9 Y+ W! N* M' w( x( N) i0 G - #include<stdio.h>
, l# h) q* X1 P3 C - #pragma comment(lib, "ws2_32.lib")
# v- f) L& d2 M: {$ ?; i5 b) I - void main()& G& q; b0 i( H7 S: {
- {
! I3 b- b& G( h5 | - WSADATA wsaData;, @# F k/ y& l% B
- SOCKET sockClient;//客户端Socket
$ J! _1 E0 T+ p) S* Z" | - SOCKADDR_IN addrServer;//服务端地址
1 r5 [) _7 F4 e - WSAStartup(MAKEWORD(2, 2), &wsaData);; G/ E& x; y1 d" N, {+ k
- char message[20] = "HelloSocket!";
B1 ]3 ^) g; l7 D F6 ~ - //定义要连接的服务端地址
& m8 F3 ^" h( L - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
/ M% K& u2 D# R3 a/ v - addrServer.sin_family = AF_INET;
' k( K d- ^1 ^# r m - addrServer.sin_port = htons(6000);//连接端口6000) O* [. f/ }/ s9 ]
- //新建客户端socket
8 Y9 x8 f" X! [) R" l - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
8 d# f* _& _, M& V1 q - int s = 0;
' W+ D* c; `; Y. K - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));, N1 H7 x# r3 c3 ~
% Y# H8 V! m4 ^5 f- while (1){
3 [+ @+ m# }6 }1 a( Y - //发送数据
' Z+ E4 W: x6 y - int a = send(sockClient, message, strlen(message) + 1, 0);
5 ~2 }4 f" ^" O- m9 |) A' a - printf("to server:");& C" u* h6 A. e4 \. P. O8 G% ] m
- scanf("%s", message);
$ O( x7 w1 Z* R$ U" n2 J: w$ z1 S - 8 w9 O" c/ M- {+ r! [% {) N
- }
. f1 V& n! W; B6 v" f6 J0 s - //关闭socket
+ C2 W) X# B/ l/ i - closesocket(sockClient);
: f: l4 P8 Z( T" P' @; o - WSACleanup();
: m' k8 C1 O* z, y7 u1 c+ T - }
复制代码 求懂的高手来解答一下。
/ p, I$ V" o- _5 _) X, `4 T谢谢了!
6 ^4 N! X1 f0 D" S4 j( v3 B. `$ N8 L5 g1 \" l# z3 e
) U. B' [) y0 V) ^9 \5 F
# d: k0 _7 Q, S: @ |
|