管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
- B+ ^3 d/ L+ Y1 S+ _" j我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。- j8 S' U& F1 l; C( b3 d6 `
Talk is cheak , show me the code.6 P6 P" W- x: p' Y2 X8 w8 Z
服务端代码:
) J/ K4 K$ g: q7 S- #include<stdlib.h>
M: @/ V* L2 E0 o |! ?% N+ j. p/ \ - #include<WinSock2.h>
( A- a5 q7 C& e9 X, m: p3 w: | - #pragma comment(lib,"ws2_32.lib")3 c% n' h1 V6 \3 n0 Z" A3 N
- int main(){
, f, k% R% R- e" N3 u - WSADATA wsd;
" A; K v) @0 @+ B8 A* g - SOCKET sockServer;8 c8 j) J8 q2 j4 J& \
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号3 i: C. i/ l& }: q6 o% M
- SOCKET sockClient; l7 v1 h0 M, w9 V! w0 Q# z
- SOCKADDR_IN clientaddr;
8 n4 D, E9 M7 C - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口. }) Q6 v" l. L( C7 p
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket; ^$ l5 m3 W) |/ N6 T- b
- . e/ |2 ?) h1 u. S
- 6 ?, e4 ]. h7 p3 T. \& O& z
- if (sockServer != -1 && sockServer != INVALID_SOCKET){+ `/ r2 ~& j$ }* E2 M! Q3 I
- printf("Socket has been created :%d", sockServer);0 H5 j. I# D& G, Q1 N! C, d% b
- }7 x. `7 K+ ?4 N: h K8 l# S
- else{
- N7 U7 g3 |7 l# T* e# h; U - printf("Socket create failed.");5 P# a1 N+ u8 h; ?( v9 n9 `" i- _3 S
- exit(0);. J/ s" s! i3 U7 s* e1 S! \2 \
- }
7 w9 X% J& |" i: J - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);4 O1 ]5 e( g9 G2 {8 e6 M- l
- serveraddr.sin_family = AF_INET;
6 [. O6 e- R+ R - serveraddr.sin_port = htons(6000);//绑定端口6000
6 p6 _! G- k# a6 q/ Y, P2 r/ u - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));3 ~0 i3 Z& Z* S/ f! d1 V r
- char recvBuf[100];5 A' _! R ~1 p! k8 L7 m Q8 l# H
- int len = sizeof(SOCKADDR);
5 I7 `0 ?5 ~( A% y5 U5 K/ ] b - listen(sockServer, 5);//5为等待连接数
. L8 T x2 n# o) K- B! Q - while (1){
! g) w# x _2 ~ L( ] - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
$ F: t+ {* h7 b$ _4 V - //接收客户端数据
8 R/ v4 p$ i* G, u$ h/ y - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK); o( C) ^: S% W* r$ S
- printf("to me:%s\n",recvBuf);
6 z7 Y$ b* U& u2 m7 @6 F% B - memset(recvBuf, 0, 100);$ L/ b) q0 {" j7 u2 R7 Y4 n8 t
- }, g6 {. C! A5 |( z; `9 i5 V& O
- closesocket(sockClient);
! b' ]$ ^& J) ]4 x( J+ w - system("pause");# o$ a0 ~5 L" U! H& ~6 w! j1 }
- return 0;1 q$ w/ _. E; M1 y( p" c, G6 }/ y1 g
- }
复制代码 客户端代码:9 Q( N a# X* T: \. i2 ?
- #include<winsock2.h>$ q' N. p3 S+ S( z% _
- #include<stdio.h>
E) | `6 A# ^6 j3 V2 w. a - #pragma comment(lib, "ws2_32.lib"). u# m7 W1 @6 D0 k
- void main()
8 m$ C' B; |+ s; q& U ?% C, X3 f$ q - {8 r( L/ ~1 P1 b+ c! X) S& Y. B B, H
- WSADATA wsaData;9 X% a$ S# ^; X% C( q) M3 S! \
- SOCKET sockClient;//客户端Socket
' W3 E7 z; V1 w- ]- } - SOCKADDR_IN addrServer;//服务端地址# ~, c, g7 C8 i7 p- [4 R1 x1 D& W
- WSAStartup(MAKEWORD(2, 2), &wsaData);
# I& Z- ~7 ^ i! I- H3 p1 e _ - char message[20] = "HelloSocket!";
2 ^& \, i- l( U& M O5 }3 w - //定义要连接的服务端地址
" Q7 `3 k8 W2 d `5 t/ s - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
8 L5 z2 j6 c: O# u- y- L - addrServer.sin_family = AF_INET;. r5 X3 ]0 v; b. x& E0 H
- addrServer.sin_port = htons(6000);//连接端口6000 T1 c- P+ \" h0 |1 t) x
- //新建客户端socket4 l3 P/ I( K0 V3 m0 {+ e* r( j
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
. y' k! K* z. j0 r$ J% c, b6 r" R0 n2 | - int s = 0;* F! v: A) e/ Y6 P8 b8 h& M
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
: H% n4 P/ s: _( V, s' z% H- @/ {
# ?% e% d4 {; a! q6 _- while (1){
8 K. K/ [% G4 s# S - //发送数据
% l% |% [6 H {1 [ G/ F - int a = send(sockClient, message, strlen(message) + 1, 0); ~# x( A% ?" U+ j5 z9 e# z# G
- printf("to server:");( R) w& [ [% t8 p/ ]5 I
- scanf("%s", message);
1 c; k& N& h, m. O5 J5 r
/ {' |% y$ E7 Z" t( e: u- }
- A5 e4 s( _: } - //关闭socket7 x2 y, R* Y9 n1 B. h
- closesocket(sockClient);
: n. L( ]) s' {' z$ }' Q6 _& ?2 s - WSACleanup();( u+ }2 y5 _, m+ _7 P5 y
- }
复制代码 求懂的高手来解答一下。
& M& `/ @" [/ _; v |4 C5 O谢谢了!% o6 _ ^! |: {7 ^, H
+ d% ?/ G: ~: ~
8 Z, O8 t2 ~/ T4 }1 a5 \9 x) e4 u% `" i2 [2 ?+ U. a7 H: _
|
|