管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
$ R5 I3 ]: y X% @6 H6 N3 A! s6 O; M我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
! ?1 `/ C4 U/ q$ s# w0 Z' NTalk is cheak , show me the code.! N; g! M$ R6 Z8 G& r! Z2 L
服务端代码:- i. J* Q# r+ f$ x" Q& U$ \! D
- #include<stdlib.h>" L6 [. r h: A5 q7 t+ Y' i) ~: Q
- #include<WinSock2.h>
/ |/ D* G. g$ W3 g( i" p4 [ - #pragma comment(lib,"ws2_32.lib")
! r' |2 w* X9 F3 u - int main(){
9 M8 [$ \) E# }. a0 v7 W, e - WSADATA wsd;5 B. U* O4 P5 u
- SOCKET sockServer;
u) m; d4 B! X8 p1 d - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号- z4 ]+ |, c8 m6 ]4 L3 o3 `+ }
- SOCKET sockClient;
, G( s# ~* K; {2 g9 W8 c# l( k - SOCKADDR_IN clientaddr;
8 a, O4 @, b8 u( `1 z% } - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
6 D: p; u; x4 n$ g" i/ W - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket9 m' L5 k% w D$ ]5 W
' I! \4 r$ Y. Y- b! c
. y$ G. u1 k6 c$ ^- if (sockServer != -1 && sockServer != INVALID_SOCKET){
. P: Y8 E- Q/ ?2 M- k - printf("Socket has been created :%d", sockServer);
' t" F4 T s: f/ d+ N9 z- [( T - }
7 X2 j. y1 T* ^+ g0 r2 K' O - else{" x7 D, @: Y$ A- w/ r/ m n
- printf("Socket create failed.");7 Y+ F! R1 A. d1 V- X( |6 T
- exit(0);
7 X! E' _2 Q, _! [$ R ~# Z - }+ B) y2 V! Z( N1 X# P
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);: M5 ^- o, U5 V0 ^0 C6 n4 k
- serveraddr.sin_family = AF_INET;8 u& J$ ]9 D V! Y* j6 Z& Z
- serveraddr.sin_port = htons(6000);//绑定端口6000
- B" q; t& y3 V# H) L& G5 t/ f - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
+ W$ ]2 Z3 z& _1 W) q$ g3 o3 h - char recvBuf[100];% c e9 U3 @7 J
- int len = sizeof(SOCKADDR);$ c# z" J4 A/ O q; K. U
- listen(sockServer, 5);//5为等待连接数
$ l( g3 ^8 H" a: F* {- g* x# c - while (1){
8 K4 d9 H6 o6 ^8 l - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
( d2 @2 \3 C/ u9 _* H/ N - //接收客户端数据, a5 i+ B m4 a7 ~
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);4 _+ R% O$ ?, R2 j0 r
- printf("to me:%s\n",recvBuf);
7 ~8 p# L" `" k7 V - memset(recvBuf, 0, 100);/ Y3 G6 H0 N; e
- }
# `% e D; i3 P* I# A p - closesocket(sockClient);- k6 s5 b9 C6 a9 q2 m
- system("pause");4 F( X# U" p5 @0 ^5 l9 Y' M1 Z
- return 0;
5 O0 z% H1 s+ m2 y! u% z' J - }
复制代码 客户端代码:4 T8 o5 G; Z( w) c5 `( M
- #include<winsock2.h>
% g$ z; s5 h4 c y, \$ I: ]3 A - #include<stdio.h>8 b" M. z; [4 z2 i
- #pragma comment(lib, "ws2_32.lib")0 }* V; z$ k0 h9 X/ b# G. m
- void main()4 }& {3 G1 [, t
- {+ E, K8 U1 K. c% ~
- WSADATA wsaData;
: N5 N# c( y% M# y2 s - SOCKET sockClient;//客户端Socket
% v- g4 Y8 L2 {8 ~ - SOCKADDR_IN addrServer;//服务端地址! a; ?5 R" ]9 h5 m( C; g3 e
- WSAStartup(MAKEWORD(2, 2), &wsaData);& S- c* |* N# X. {
- char message[20] = "HelloSocket!";9 R. H) w4 ?# x5 K7 Q! P7 U
- //定义要连接的服务端地址3 [/ _( R+ H4 t
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
" p! c7 N/ D7 R* J2 q: l- |* B - addrServer.sin_family = AF_INET;# _- D- i/ g2 b& [0 F
- addrServer.sin_port = htons(6000);//连接端口6000
) G: i" P( B& {# \( n) K - //新建客户端socket# p% T8 r% ^- g. r
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);: Y: X& o0 x4 ^% {- g' V; G; o
- int s = 0;
+ c. k7 G ~3 O. D8 S - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
|% D3 G2 U& D
" }; Y" s+ ?* D: d- while (1){7 Z4 j4 p W4 D; b" E" k$ N
- //发送数据! ]. @' {2 b, }6 Z
- int a = send(sockClient, message, strlen(message) + 1, 0);$ N; S: ^ C: U' q1 c
- printf("to server:");. M- Q& L* i) Y, {4 T! {6 J5 x" D% A
- scanf("%s", message); M/ r4 X& _9 ]) Z
- : D* @4 W* ]- L! M/ t4 c5 n
- }
0 U% o+ ~# S9 }5 O) \. U - //关闭socket
* { ~8 }3 A7 ~1 K @, @3 x5 l - closesocket(sockClient);& y( t; t. K. W. b$ V/ z: p! D: S
- WSACleanup();
3 m/ H* X$ b @7 d r- B - }
复制代码 求懂的高手来解答一下。
1 S& o8 c2 r3 j) D谢谢了!/ J$ ~ a5 G. ~% r8 C
& T; R% c) L; y1 s" d- p; e1 I+ \4 ^
3 T7 s2 a+ }0 o, I+ ?% X/ w
|
|