管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。8 s5 S$ w' M$ x$ a3 R# ]
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。) g7 t6 X) b! o* \$ q7 s
Talk is cheak , show me the code., a! z6 h3 y2 o) Q5 v+ O
服务端代码:
& {; W. S" `- M% J( ^0 E# u/ O- #include<stdlib.h>7 q/ Q9 N& `3 A* g# l/ y! C& O
- #include<WinSock2.h>: L9 i! M3 Q+ N3 r C9 p: F
- #pragma comment(lib,"ws2_32.lib")) L5 c( f7 p+ |) e
- int main(){9 J- w; m# u1 F# P- ~( b2 v
- WSADATA wsd;; F% C5 X' l2 o% g% ?
- SOCKET sockServer;$ t: e$ N* @- ~) P8 d$ ~+ |
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
. P" Z) V' ]. `0 U* A - SOCKET sockClient;0 g( \; ^& f3 t
- SOCKADDR_IN clientaddr;; B) m7 S q' r6 Q: J
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
% |- k2 A. A# l# W, m* I - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
& |7 D4 U8 X/ s- L
. Y4 Q0 f" `7 o6 ~4 c- c0 Y
9 g1 V. j/ Y+ b- Y" E- if (sockServer != -1 && sockServer != INVALID_SOCKET){
! [$ i# Q9 w3 W. j9 Q& Q - printf("Socket has been created :%d", sockServer);* V, T' S+ U1 y) ~( Y8 ^
- }5 e8 {" ~4 t* s. z4 Q$ {
- else{
+ ~) C, R$ ?2 N G+ E1 f4 a - printf("Socket create failed.");
, |0 v8 m, L S l - exit(0);
) o, ]+ S- B: w" L1 L2 K8 B. f' Y - }
$ B0 w' T" U; a! I+ a% h2 q - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
* S4 ]2 S* z7 T2 O$ [' b - serveraddr.sin_family = AF_INET;7 U1 X7 J" a3 Z9 Z/ R' o, [
- serveraddr.sin_port = htons(6000);//绑定端口6000! ]1 \7 p' J/ |& `1 D4 t
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));" l1 s5 ]: }" R+ a& J7 T
- char recvBuf[100];
4 y0 D: L- F8 k5 @; A - int len = sizeof(SOCKADDR);
6 h$ E& A7 M, j& J" h8 Q# ~9 _! p$ q - listen(sockServer, 5);//5为等待连接数
5 f) p9 W( T/ o# U# R - while (1){; o3 \$ G' ?3 i, S! u' {* P8 q& O
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);5 ^/ E5 ?3 H: g' o, I, z
- //接收客户端数据2 L& v1 G9 ^. ?' L' i, x# F6 X
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
6 k0 m1 }. y+ X - printf("to me:%s\n",recvBuf);3 n9 e8 \, R- a: K; [! q. C; X
- memset(recvBuf, 0, 100);, Z ^" ?: I1 ^1 a
- }
& N1 S2 B/ b7 x. A - closesocket(sockClient);
D* l* u5 `: f - system("pause");
9 A0 c3 L! L7 ^8 w9 i - return 0; k4 d; O S' D L9 U
- }
复制代码 客户端代码:
1 W: R: U2 J1 H; ]! S- #include<winsock2.h>* u. {$ `% d S% S
- #include<stdio.h>
3 x4 S n8 e7 J) }8 c - #pragma comment(lib, "ws2_32.lib")
; G$ G4 V5 }. i- z0 H, J+ n - void main()$ T6 L; o8 q% ^4 E
- {
; l% j. u7 W9 |( O; [ - WSADATA wsaData; I) u' U4 c: e! n
- SOCKET sockClient;//客户端Socket7 S; [ m, }! S5 u3 g& J; M
- SOCKADDR_IN addrServer;//服务端地址! M8 Z4 g- y3 b
- WSAStartup(MAKEWORD(2, 2), &wsaData);
4 S" H! \2 U! l6 \ - char message[20] = "HelloSocket!";$ A+ Y( w7 C2 l. u K7 Z
- //定义要连接的服务端地址
: f- K' T' b1 h5 _. H% k8 } - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
4 |5 }! {, K6 @4 } u, {& I. D - addrServer.sin_family = AF_INET;
' g& @% a+ d' U8 p4 i' Q - addrServer.sin_port = htons(6000);//连接端口6000
1 ]3 Z1 Z$ _2 D8 ]2 R7 a - //新建客户端socket$ U ^+ W! J0 \
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
5 F) J& H3 s$ d - int s = 0;
6 a% g, n* p! `, }! n, s+ {, G - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));- \$ F. Y2 L: ?& F
- , v' |5 g- S7 ^3 M' ^. a" G9 T) T
- while (1){
7 P3 u. }( S) ~' p- d- K - //发送数据
) ^3 u2 N' G8 k0 W7 O - int a = send(sockClient, message, strlen(message) + 1, 0);
0 {; D, ~% u9 V* j - printf("to server:");$ N- o- Q' u k% e
- scanf("%s", message);1 |) p- \1 t, B% B$ u$ Y, f ~/ m s
- + v5 V: \) j; P4 ^9 y
- }
1 G" M+ E+ m; K/ g4 g% ~- D9 M) | - //关闭socket
$ A# G5 I( ~( K3 c$ j6 L" [# U8 `+ k - closesocket(sockClient);
- n3 u& T9 j( v! L! { - WSACleanup();# Z- E1 B; o4 B& f* Y6 t U1 q4 ?
- }
复制代码 求懂的高手来解答一下。
! |8 u* Z5 S6 S+ ^6 O* S8 c, A' Q谢谢了!
5 l& L: s2 K* D, G8 {4 @0 W* }2 F: v3 m) T
) T4 F- G K: P) f4 ~7 P! V. o1 v: A
1 t9 U* w, a- p |
|