管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。1 m7 @; i `3 H! |" O/ R
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
0 N% k4 o0 B( Y1 `% U- FTalk is cheak , show me the code., i9 a s* }) I+ V+ J9 v( H: y
服务端代码:. R( O* c0 B( q3 p
- #include<stdlib.h>" @& ~0 E ]6 t
- #include<WinSock2.h>
3 k+ B6 V5 s, h9 Y# Y+ t% G - #pragma comment(lib,"ws2_32.lib"). D s1 a p8 N t7 a
- int main(){
, d5 o& P" A& z4 E. Y, z9 X7 N - WSADATA wsd;
$ g$ i1 }# e' v - SOCKET sockServer;
( [9 A) J* g1 i - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号+ @; c4 P4 f3 _. C) {
- SOCKET sockClient;
Z' s5 t/ j5 ?; H - SOCKADDR_IN clientaddr;
# B% \# ?9 v3 d+ K/ s3 @5 N$ x4 w - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口5 ]2 ^9 M2 C+ q+ w
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
0 X* c& E% s ^! d
3 h) ^/ R& @6 x! i. y" S$ R& b- W
( d# K" `5 o }1 ]- if (sockServer != -1 && sockServer != INVALID_SOCKET){
9 d$ ~6 s5 i T! q - printf("Socket has been created :%d", sockServer);" e# h: N8 R0 E6 m
- }$ U3 ` `8 X) z7 N5 f; r% ~( M
- else{
: L' L! [, `. S y - printf("Socket create failed.");6 a' c# F' X% R% p" Y4 M
- exit(0);* u0 D, {7 ?9 j- q( W( `
- }4 I E0 E7 R# x4 s- S: Z6 Q
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
7 I& K" ^; ^; {. Z9 ]% L - serveraddr.sin_family = AF_INET;" w# ^$ @, z' d9 E/ o: A, \
- serveraddr.sin_port = htons(6000);//绑定端口60009 e) o1 w4 q# b* w% d
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
4 @5 ?7 @3 C2 ?" f1 K - char recvBuf[100];
5 C6 N$ m5 a& A1 R: s$ M; d - int len = sizeof(SOCKADDR);7 Y4 h+ o- _1 m1 Z2 U. z/ D! d& L6 w7 Z
- listen(sockServer, 5);//5为等待连接数9 V, a- T9 ] Z
- while (1){6 p3 D5 @7 ?8 x: x S
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
2 y2 y' ]& f& g0 b4 Z - //接收客户端数据# h ^, m, V6 S0 {9 k
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);! n4 b# P3 f# {! X9 b
- printf("to me:%s\n",recvBuf);
2 v7 T) K+ b0 z) p - memset(recvBuf, 0, 100);
4 W/ v" Q! C T: N) e - }
2 S. Z$ P6 j% s# u! j( L" V - closesocket(sockClient);4 u* Z* n* p/ i9 u6 g' Z! x
- system("pause");
! H- d6 q p3 J0 c @6 A% u$ m9 ] - return 0;
: l- z. y& ^& M- e - }
复制代码 客户端代码:3 } V. T v1 g' W# m' E# n
- #include<winsock2.h>
* R. A" X# _: s5 G' P& O* T - #include<stdio.h>
; A+ p; r9 p6 C* X9 e0 m; U - #pragma comment(lib, "ws2_32.lib")* _/ \7 Z# ^. B0 r
- void main()
& v# s2 T9 K' Q0 q$ o) \ - {: B V/ A0 H5 R( \" F
- WSADATA wsaData;
+ Z; y! a( E- q) B3 \) } g - SOCKET sockClient;//客户端Socket
$ O" \, j5 `/ x - SOCKADDR_IN addrServer;//服务端地址
2 M3 u+ O" i( k8 j - WSAStartup(MAKEWORD(2, 2), &wsaData);2 F; O( R& |4 Z8 d) V
- char message[20] = "HelloSocket!";0 i9 _2 N1 l! n/ X
- //定义要连接的服务端地址7 `" w; _, I. C- F) N& P: j! T
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)& G6 g; ~( g2 F( j, Z
- addrServer.sin_family = AF_INET;: P/ v) M. h, j& z% {8 {; c T
- addrServer.sin_port = htons(6000);//连接端口6000
* q i6 Z @5 x - //新建客户端socket
, o& ^8 Q; Q4 p, p" P - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);6 G! B5 I; E# p; t2 E* A$ y8 h& G
- int s = 0;
3 X* U! ?, T" _# S+ I - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
E" G+ i* F: R, B" I5 L2 H& \ - 8 `% F: n- |0 B5 Z
- while (1){
2 a# h7 h- Q5 O: I7 j - //发送数据
1 O' H3 K+ I# \7 y7 f/ [/ S$ I - int a = send(sockClient, message, strlen(message) + 1, 0);0 P f# K9 P! j$ f, t$ b3 t
- printf("to server:");& O% Y; e9 w; B2 s; y2 \
- scanf("%s", message);9 W; m* A0 J" K) o {
& v5 p% G* B( {; x- }6 G- X: E6 ?" B4 ]7 S9 [) g0 f
- //关闭socket
3 `. z, y7 E5 }) M) e' Z0 A% ?0 K& D - closesocket(sockClient);3 n k* i. c9 y2 }3 o \
- WSACleanup();$ s4 U1 k1 @5 u9 G4 ?, J; g; W
- }
复制代码 求懂的高手来解答一下。# d8 d% b7 F! ?% ]1 K/ z$ @
谢谢了!# ?/ D& T; i) \% J- F2 [
: w$ _% c( b5 O
' a0 b' I: y0 l- C
$ S. X* y9 Q- i# c3 `% R% E ]/ m; i
|
|