管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。( a L% b- a5 [, x G- ]! k
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。8 W2 P2 E0 t7 ?% l3 N3 e- v) [
Talk is cheak , show me the code.5 l, F( l$ F8 n% g: `" k4 e
服务端代码:
$ Z: k$ T# _7 ]; [" W: T- #include<stdlib.h>3 N! u( `) [! H! `' Y
- #include<WinSock2.h>5 g% G- E) {" D( R Q) A, G( {
- #pragma comment(lib,"ws2_32.lib")
0 e5 w" ^7 r- Z2 m7 d K - int main(){% s2 l; x6 E- Y a# E
- WSADATA wsd;% s/ _. B+ Q" {
- SOCKET sockServer;
, X8 E$ v; h7 O" x - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
5 m4 e, X; s0 W5 z+ e: \4 \3 d. }: c - SOCKET sockClient; G4 e* o6 u/ c4 | X, R! b; z& D
- SOCKADDR_IN clientaddr;
% B" m0 r6 T7 _. S - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口 g, m, Z3 E" Q( ^: L6 Q: Q
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket+ ]9 Z5 X: n: H9 }
& `& k% d% \# r: z5 s! C7 v5 U
& v1 I6 m) ]# ?1 x- if (sockServer != -1 && sockServer != INVALID_SOCKET){$ o; ^7 N+ f8 P
- printf("Socket has been created :%d", sockServer);0 W4 @; y( J8 [% S/ \
- }
5 \1 I6 q/ x0 l$ w! O0 }) n( i - else{
" p$ c% ~+ _8 | - printf("Socket create failed.");
% o' K% U, i5 r0 ?1 D/ ]6 Q2 j/ q - exit(0);7 ?- I( g- q- G g! c: Q( ?
- }& |4 O1 E8 O* p* \0 H3 ^4 w
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
7 a% V p: f7 i - serveraddr.sin_family = AF_INET;
# ?+ M+ I" v, u - serveraddr.sin_port = htons(6000);//绑定端口6000
/ C5 a% C) ~5 Y3 r5 A - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
) l# G4 K0 M# f4 f8 O2 }& a - char recvBuf[100];
# {+ ~. l5 x3 _' f - int len = sizeof(SOCKADDR);* g. n5 J9 X; F% w" {1 K
- listen(sockServer, 5);//5为等待连接数
5 Q6 j+ \- b% G8 K$ H* S* B% R) T - while (1){
9 ^/ v+ N8 a$ J - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
! ~: j3 s8 ~$ R- _! p/ V4 C - //接收客户端数据
7 y' W H |7 n3 T2 B3 A - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
# V8 P' P, C5 ?% `6 n - printf("to me:%s\n",recvBuf);, L! w( K) v) ]; {% W: P' w* r
- memset(recvBuf, 0, 100);
( e6 j) O1 @( J) ~; k, o! Q6 u6 E8 I; H8 g - }
# m" j# |& t$ v; u- R. [ - closesocket(sockClient);8 [3 O7 `, e/ N" E( \+ G' k3 A7 x+ P
- system("pause");. o) h. K. O+ m% p. ?! q3 G
- return 0;. f, W: E; t& l2 f
- }
复制代码 客户端代码:" a% |& B8 _" R. \* n6 W1 e
- #include<winsock2.h>
5 x V4 m3 D# [8 L - #include<stdio.h>
8 q, t. A- m4 k" v) w2 X - #pragma comment(lib, "ws2_32.lib")9 b3 M% t l9 L; k/ }* b# `
- void main()' [* Y( q: a) X0 ^
- {3 ?% p# W1 L7 N' r8 F0 ^( ?
- WSADATA wsaData;
4 d8 v- \. u% ]+ \% G% c: W - SOCKET sockClient;//客户端Socket
( _- N* i0 u1 z - SOCKADDR_IN addrServer;//服务端地址
+ o; U' W9 }' e- n9 E - WSAStartup(MAKEWORD(2, 2), &wsaData);; x9 H$ o E0 g# ~
- char message[20] = "HelloSocket!";8 I0 ~: T; D3 S+ M: g
- //定义要连接的服务端地址: W! d0 v5 C& O0 S4 C4 M: m
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
! ~# Q- ~2 @+ H, E7 H) J4 l - addrServer.sin_family = AF_INET;! c* i: j7 Y) N
- addrServer.sin_port = htons(6000);//连接端口6000
' ^6 U; {* c4 Q, X, P - //新建客户端socket
" V7 | K* A: w$ ~ - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); c( H, E9 e3 K! s7 z+ i' k
- int s = 0;/ s# I# @" f$ f# N
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));* A; o2 W4 w0 ~/ i8 \
- 9 n$ H9 U; T3 Q; U& `2 Z. W+ X$ s
- while (1){4 s j# ~+ B; ^8 r& s" q7 ]
- //发送数据0 [! {$ `: ?+ T4 [# n
- int a = send(sockClient, message, strlen(message) + 1, 0);8 z8 B* J: _6 E- J
- printf("to server:");
7 X( C4 U3 p% ~ - scanf("%s", message);1 Z# |- o0 S: ]. \
" N* Q* k6 M* g* T- }
, a* S. z" Q4 c% |: t. K1 C - //关闭socket& N, R4 k' y0 n/ f. q
- closesocket(sockClient);+ d6 [' O+ u# h6 y
- WSACleanup();
: R, [: x: O2 Z; t5 W - }
复制代码 求懂的高手来解答一下。
N* M1 C, R0 N) `" Y谢谢了!
* P" _& u% i6 N( A9 [' L& Z( y2 [& p
# l/ R* h% x& |( Y. B& [% T. k3 ?/ d
3 c ]0 g! w, Q5 B, Z4 w
|
|