日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言接受socket发送尾部有乱码,C语言socket编程,服务器和一个客户端连接时,服务器能正常收到信息,2个以上就出现BUG了...

發布時間:2024/10/8 编程问答 40 豆豆

新手剛剛接觸這個,建立的是控制臺的32位程序。

程序思路服務器監聽,每次連接,創建一個進程,全權處理該客戶端的通信(不用考慮資源浪費問題)。

服務器監聽部分:

while (true)

{

sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);//每次有連接生成SOCKET

mj.sk = sockConn;//mj只是定義的一個結構變量,用來傳遞2個參數給新進程

mj.numb = n;//

_beginthread(process, 0, &mj);//生成新進程并且傳遞SOCKET給新線程

n++;//統計進程數,也就是客戶端的序號

}

處理部分:

void process(void *lp)

{

Soksk *p = (Soksk*)lp;

SKT[p->numb].sk = p->sk;//SKT是全局變量用來保存不同客戶端的SOCEKT,

char rcbf[50];

send(p->sk, "您已成功連接", 13, 0);//告訴客戶端已經連接

while (1){

for (int i = 0; i < 50; i++) rcbf[i] = '\0';

if(recv(p->sk, rcbf, 50, 0)!=SOCKET_ERROR);//接受客戶端消息,目測問題最大的地方、

printf("本次收到%s,from socket=%d",rcbf,p->sk);

}

客戶端就是簡單的發送了

while(1){

gets(sdbuf);

send(sockClient,sdbuf,49,0);

}

}

故障表現

1,就是一個客戶端的時候發一個消息,RECV收到2次,另一個亂碼,但至少不會丟失,每次都能收到。

2,2個以上客戶端時出現,經常出現A發送不能收到,B發送一下,B的收到,A的也收到了,但B不發,A的消息永遠不會收到。有時候B發了A的也收不到,然后亂按幾下可能就是B的收不到,A的能收到了。

我的問題是:

1丶如何解決以上故障,再幫忙改個程序(本人用的VS2013)

2丶是因為客戶端只有一個接受端口,或者緩沖區?影響了數據傳輸?,不應該啊,

3丶A發送消息服務器沒收到。RECV依舊在阻塞狀態,B一發送怎么A給收到了,不同線程下緩存文件不是不共享么,為什么2個客戶端就會出現這個情況。

4丶希望越詳細越好。

君之大恩,不勝感激!

總結

以上是生活随笔為你收集整理的c语言接受socket发送尾部有乱码,C语言socket编程,服务器和一个客户端连接时,服务器能正常收到信息,2个以上就出现BUG了...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。