管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。/ D) s+ b$ {* [) \
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
2 z O0 }& e+ yTalk is cheak , show me the code.
: U! N. P( u; l3 K服务端代码:
6 Z; g: Q/ R- W3 c* m" x% U- #include<stdlib.h>* F N/ l" @* @/ y8 ~ z
- #include<WinSock2.h>
( ^; X, }) S5 |/ s5 c! [) } - #pragma comment(lib,"ws2_32.lib")
; W) Y% r$ |. k - int main(){' v4 X4 U) ~, W3 \8 D
- WSADATA wsd;
4 W& k) ~0 [. t: Y0 ?) h; d* ~0 { - SOCKET sockServer;2 d5 t& @" J8 q$ Q( k
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号) V0 x8 [7 c" O! `( z
- SOCKET sockClient;
4 o8 S7 i& u+ j( l0 y - SOCKADDR_IN clientaddr;. t1 e9 R/ m6 |, J3 |
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口, i6 D! e. z; X: r9 k3 J4 ~
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket. N, X+ m" h7 |( A9 T
- , M" `/ q( O" U7 ]3 ~0 z
: W: x& B: }$ `9 m+ }- if (sockServer != -1 && sockServer != INVALID_SOCKET){
$ K# f5 B$ @7 f - printf("Socket has been created :%d", sockServer);
. i* e, W4 [- i( F4 W) C - }- v* X3 M t8 ]5 V" i) B
- else{
4 p+ \, T4 M8 b - printf("Socket create failed.");% J. u. y8 b1 V
- exit(0); G& G2 x) S$ C$ r2 A$ s
- }
6 v! O$ v/ t# M7 r" L - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
/ F! s4 J& ]) z# k6 m - serveraddr.sin_family = AF_INET;0 T/ q3 D+ s, V7 h8 c; d$ x6 E
- serveraddr.sin_port = htons(6000);//绑定端口6000
/ s5 Y6 A8 n A( T - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
/ X& R# K; z# t* v0 M4 S0 W+ J - char recvBuf[100];
+ _9 g9 z1 U4 m3 Z& l5 [+ I - int len = sizeof(SOCKADDR);, S( J/ ?" U- r0 J" a% q9 m
- listen(sockServer, 5);//5为等待连接数0 s9 f, m: K. m6 B; D
- while (1){
5 r- E- Q: A |5 a& p; d - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);% @+ D: c# P, ^+ i+ S2 @7 ~1 s
- //接收客户端数据$ t" u7 R1 i! _+ H" D& ]2 A) G
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
5 ~' l3 G5 W6 K( [+ h - printf("to me:%s\n",recvBuf);
# H& U" p1 }! Y3 T - memset(recvBuf, 0, 100);
2 M% o G5 M0 \* M& ?1 C+ F - }
! N, y1 k+ @, j8 ^5 S5 i - closesocket(sockClient);
+ F0 l( K( m/ _% ~8 q1 @- ^ - system("pause");2 R. z4 |2 c/ G6 o6 G5 E
- return 0;, v% p* o* I+ d1 `
- }
复制代码 客户端代码:- M& R. G) x( U4 U: q
- #include<winsock2.h>
8 R' z' X0 z) d, X) L6 j - #include<stdio.h>2 }1 V" Z7 x' p$ }! j p) k
- #pragma comment(lib, "ws2_32.lib")
2 U7 |/ a0 R2 h0 Q. `" h8 @ - void main()/ K, F+ b: i. X7 X" z8 z* }
- {
1 j3 _& L0 i8 ~7 j7 F" u' F2 b* x2 H P - WSADATA wsaData;2 [+ s( b; |5 S8 C# ^! [- I
- SOCKET sockClient;//客户端Socket+ T$ X& ^6 [4 W9 {& V, e2 I
- SOCKADDR_IN addrServer;//服务端地址3 p" M2 J F- d J
- WSAStartup(MAKEWORD(2, 2), &wsaData);
/ X. R# @/ H- N3 {3 B - char message[20] = "HelloSocket!";: }: B. |1 ^4 L) {
- //定义要连接的服务端地址
$ k% L5 h W6 {& ?9 T7 k5 P - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
' N' M8 D, r4 C. k8 f, ? - addrServer.sin_family = AF_INET;9 g% p1 E$ y# T) @. `5 [
- addrServer.sin_port = htons(6000);//连接端口60000 a; }7 u$ E2 e5 [
- //新建客户端socket
+ I& s7 h+ o& V$ | - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
: U: H0 O( E+ x. d* A - int s = 0;: ?" _# x) D) M8 X0 C6 b9 g, H
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
/ ^; g+ F8 z# @* A5 Q3 x: f
! U( U, M8 n3 a' E7 ^! G! j# N- while (1){
: |- p w1 n* d% d D - //发送数据
5 n- A U4 x3 A - int a = send(sockClient, message, strlen(message) + 1, 0);4 `7 W( s2 M0 Y6 b3 N8 d# A
- printf("to server:");
( y/ p0 U# N5 L _; O4 A - scanf("%s", message);/ F) [$ x, Z& O# N5 g' ~9 i0 d0 F/ }4 H
- 6 O1 u5 _* B2 ?* \8 b9 [" {
- }
) R: F5 |- O: `7 n) o6 I4 w - //关闭socket
4 `' l! e6 _0 J4 e - closesocket(sockClient);$ \( y4 {! u% E3 l4 T0 W/ k; {
- WSACleanup();1 t3 q; D+ b+ F
- }
复制代码 求懂的高手来解答一下。
) `0 O3 }3 a+ H3 A x谢谢了!" n2 ~ q4 z- j
$ v: o" |6 e: ~4 ^- o6 I
" O2 q0 s% T5 ^2 X( M( {
% M. ^0 Z1 {9 F' T# m. k+ D |
|