管理员
![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif)
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。- Y1 v: s% c0 J" s9 O9 J
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
0 f' p' m* Z7 h& M/ K' DTalk is cheak , show me the code.6 v4 D) E0 K8 v! V2 l1 h1 ]
服务端代码:& B( P U! M& U$ k+ e- b
- #include<stdlib.h>
& N* |; _& z" A, I/ [2 u$ P - #include<WinSock2.h>3 z4 B0 v* V% ]
- #pragma comment(lib,"ws2_32.lib")6 V$ n" d) W0 d0 q; y% I
- int main(){
+ A- S- |: W; F) [0 W: y) w9 v. K" I - WSADATA wsd;
3 H: J+ q7 f0 u' {) c$ k - SOCKET sockServer;
' N' Z; M/ ~1 a' Z. N" O4 U - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号7 |: T2 M* C& t3 [# L7 m
- SOCKET sockClient;
0 l Q5 P3 g" t. s1 P% M - SOCKADDR_IN clientaddr;
, o0 K G& ?: y - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口* ?3 D/ y* E& c, K7 q3 ~: |
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
- ]3 t; H* t4 ~* u( F
* k7 Q, n; P3 s* R# B. m$ d
/ t) ]8 `/ [+ v2 {( t- if (sockServer != -1 && sockServer != INVALID_SOCKET){" m1 r( l! i/ Z) Z }4 w/ e
- printf("Socket has been created :%d", sockServer);- i6 {. G+ C0 s) R( Q* |
- }
& W7 m/ w# d4 O {2 ]. r6 m2 A - else{# q+ L# o0 b% ^. U* N1 R; @. U5 r
- printf("Socket create failed.");
: e8 [) Z' d$ s - exit(0);) L/ k' n5 h5 M9 f3 h$ R. U" k
- }4 ~; ]: N1 o2 `- @$ N; V' ]9 G
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);5 H; X" }3 u7 V$ |+ p
- serveraddr.sin_family = AF_INET;+ h' \$ e8 D8 v" K, e0 r6 w
- serveraddr.sin_port = htons(6000);//绑定端口6000' f' j+ n1 y9 a2 C. G7 a
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
5 |) g+ x8 c! V; T) b& O - char recvBuf[100];+ \- c) j3 s9 m$ y8 K
- int len = sizeof(SOCKADDR);6 }4 \0 b9 m# J8 |5 |
- listen(sockServer, 5);//5为等待连接数" l4 E/ d p( F& ~, l {$ A
- while (1){
5 {3 w' x. \2 d' y1 ^8 } - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);; `/ q4 i- p- h4 V5 M
- //接收客户端数据# Z3 S( n. h& W g
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);4 P2 r9 m q% e/ x+ ?- Q& P- |# _
- printf("to me:%s\n",recvBuf); z; O6 b+ [0 h9 r
- memset(recvBuf, 0, 100);5 r- v8 Q t; v/ ]% R
- }
6 P1 ~; g }! ^2 Y - closesocket(sockClient);/ w6 i, p M9 _1 b
- system("pause");, i# q8 W3 K8 V! H
- return 0;
4 h' n6 F% B. A0 |& ` } - }
复制代码 客户端代码:& @8 E$ y6 k8 t
- #include<winsock2.h>
2 C" r) G! M% ~) u9 J5 F - #include<stdio.h>
/ |) d. ~9 p9 t - #pragma comment(lib, "ws2_32.lib")& c) R! x. u+ U% s4 W9 p8 S$ ?# e; L
- void main()1 U' k4 j! G- A9 `( g- b
- {6 b& ^' T- v/ {2 A
- WSADATA wsaData;
3 a3 ?$ X) A3 L* g$ U/ D, z3 U - SOCKET sockClient;//客户端Socket
% K/ H, i1 j/ n - SOCKADDR_IN addrServer;//服务端地址( P+ a- y# S* u4 C
- WSAStartup(MAKEWORD(2, 2), &wsaData);8 Q& y; a! x) ?; h6 A1 s4 R9 N& S; }
- char message[20] = "HelloSocket!";
7 K) K- l' i9 L% t) R1 Q - //定义要连接的服务端地址8 x+ ^& K! q5 i- {* }8 n
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)- [3 c2 Q* [+ W$ v3 T( Y
- addrServer.sin_family = AF_INET;
: @) n7 d6 a, p% L* r - addrServer.sin_port = htons(6000);//连接端口6000
8 }& z. t0 j- f5 p3 l3 A - //新建客户端socket$ R5 C. E& b' U* F6 }
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);" j% M4 ?! x8 A {
- int s = 0;
: U1 e2 w# j/ c% r: W6 S - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
) n+ j7 k& m0 L' F7 x
' {7 v9 [: I: \7 F: N5 f- while (1){
, C" J8 [* v2 i% a) R - //发送数据' R! }) ]) e9 j) j& _) Y
- int a = send(sockClient, message, strlen(message) + 1, 0);7 M( F) y7 A- F j- [3 n x
- printf("to server:");: r7 |3 V- G+ `0 J. Z+ c. U
- scanf("%s", message);
$ z8 P: }0 [0 K) r$ V$ f/ }3 A& o
" H9 ~" o3 ^, ?: F- w- }$ @ x# i- Y9 k1 ^9 O
- //关闭socket
4 e+ T" a% y' `: w0 ] [ - closesocket(sockClient);
/ |2 Q C0 c1 c. ^1 W/ O - WSACleanup(); I# u# {" w+ T: R: d
- }
复制代码 求懂的高手来解答一下。& N+ \8 B6 d: h' u6 ^- _5 p
谢谢了!. H3 n; O/ O0 t0 A. _5 w
{+ l2 Z# {) S; O, G; e) Y! Y; Y' ~) A
! O0 R$ \( [' r, T) }1 ]
|
|