管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。) y* h4 w9 r7 R- H# i9 ^7 N$ U: H* q0 {, b
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。 }: t( X# J( I# Z8 U$ p
Talk is cheak , show me the code.9 [! z8 ]9 ~( H% `, r4 R- [
服务端代码:
" ?4 F7 \# ^4 m0 I- j/ x7 n" v- #include<stdlib.h>
, q3 p. r& j3 [2 f - #include<WinSock2.h>
4 P) Z; [' z) w$ J - #pragma comment(lib,"ws2_32.lib")
' D' l+ }# s' [& A - int main(){
7 C. U) ]- r5 O: t T9 ]: ^ - WSADATA wsd;
7 q) t% C* M6 k( a8 e - SOCKET sockServer;0 F6 b0 V$ b! N/ q& j S/ t; y
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号% ]0 D4 n2 K; \/ I
- SOCKET sockClient;. }' E* V0 [ k- E/ q' u
- SOCKADDR_IN clientaddr;
* z/ @7 q& r9 n7 Y8 ]1 q. H - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
( g+ g/ B+ R7 n9 u! W - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket% K0 z6 g ~& L0 N% G7 w
# ]0 {! T2 U) ?" Q9 Z, Q0 B
" y( V, F" h% Y- if (sockServer != -1 && sockServer != INVALID_SOCKET){% \5 @) W$ h4 a$ X7 U
- printf("Socket has been created :%d", sockServer);5 [* U8 f6 o- \' }$ e* o' r
- }. R% x( B$ y3 F. k
- else{; ~2 S- F; D" a/ e* q' X* U. F0 ~
- printf("Socket create failed.");
4 ~. T1 R1 K; w! ~- ?5 a3 l - exit(0);0 x4 L- n& m* ^$ G# l3 ~/ H/ M
- }
& c# D0 v: P9 |0 X) c7 \ - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);) G* W- y4 q+ _, k& L9 z
- serveraddr.sin_family = AF_INET;# O4 m2 ^) U9 D6 c9 I) X
- serveraddr.sin_port = htons(6000);//绑定端口60007 H# A3 ?0 k6 b! V# y$ z! L
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
. d0 W7 Z. a* Z* N. _2 t - char recvBuf[100];
; Z" Y1 G5 M2 y7 f' t' g& P% f. I1 e - int len = sizeof(SOCKADDR);
3 Y& ?+ u' t/ i0 {# }' I; L+ g - listen(sockServer, 5);//5为等待连接数
% V, n& ^( C" E, j5 X - while (1){
. \% k b6 v* w) d- M! k4 L - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);. { T* }( z/ m. G3 {2 c4 @$ @
- //接收客户端数据; O! X" x u5 D; o+ S
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);. D3 _$ r8 A% @7 i5 l) p% Y
- printf("to me:%s\n",recvBuf); r' f# B5 E6 \! ~7 D% f g
- memset(recvBuf, 0, 100);, O1 N& ~1 q3 s8 D: D: t
- }
7 z2 ?9 ?! ]" o) w - closesocket(sockClient);3 S+ |- l0 L1 `* ?/ a/ A
- system("pause");
- a: r1 E" A' o1 R& D - return 0;
6 x8 o1 ]! _5 Y - }
复制代码 客户端代码:
: z6 I) r/ U8 m( G; f- #include<winsock2.h>
7 R, e8 s g$ F" A - #include<stdio.h>4 g* s8 Q- x6 D+ T, K$ E i
- #pragma comment(lib, "ws2_32.lib")4 i4 x. D* L3 X* V% y3 O, o
- void main()
$ D- W+ p$ x/ V& j - {; B3 k, A1 C8 k
- WSADATA wsaData;
1 T2 x1 }0 j' s& T - SOCKET sockClient;//客户端Socket
- @4 g) w3 M H+ u. q' n - SOCKADDR_IN addrServer;//服务端地址$ J/ Y4 D( p2 G
- WSAStartup(MAKEWORD(2, 2), &wsaData);3 U) e# E+ j; m( o7 @1 A
- char message[20] = "HelloSocket!";. a3 G2 ?2 G/ g: ~
- //定义要连接的服务端地址
* S! R, `) E. l {5 i; ?: L7 F b3 \ - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)% l, Q+ l1 z/ L0 s0 W
- addrServer.sin_family = AF_INET;5 }$ o- {' a& ^4 P
- addrServer.sin_port = htons(6000);//连接端口6000
0 h. j# a9 _0 }5 @: I - //新建客户端socket/ I: r8 L4 }; s6 t N$ q% h& z' n, z
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);. p9 z$ b$ X- e3 }
- int s = 0;; V3 z/ M0 X, A* b! {& z9 c4 }* b
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
# G9 l* G) y5 Y" @6 ^
, T" ^. M1 y- x7 U3 i. C0 d( c# m- while (1){, D0 x$ B! S1 ~: c: h
- //发送数据( z+ F6 \! J, E* k
- int a = send(sockClient, message, strlen(message) + 1, 0);# X! f; R4 p/ r4 {
- printf("to server:");
/ n ]+ d: F( b) | - scanf("%s", message);
. n1 e2 s* T0 m3 R: Y4 P5 m0 Y
5 h% ^. u: U( i! m- }. _) P7 @' n) Z! W, I/ E! d
- //关闭socket1 ^: u" Z$ F8 u: W8 w0 S5 g
- closesocket(sockClient);) E' b ~1 d6 D& r6 n
- WSACleanup();# [! Y2 `/ J( o- \$ J0 \
- }
复制代码 求懂的高手来解答一下。
: T1 z$ l8 v+ ]+ t谢谢了!
( F2 a# a/ Z7 p- R! W6 Y7 E$ ]5 M N7 @
# T7 t% E" N. f: C f( D
9 v9 @. Y: S8 i. f
|
|