C语言socket编程,服务器和一个客户端连接时,服务器能正常收到信息,2个以上就出现BUG了 100

新手刚刚接触这个,建立的是控制台的32位程序。程序思路服务器监听,每次连接,创建一个进程,全权处理该客户端的通信(不用考虑资源浪费问题)。服务器监听部分:while(tr... 新手刚刚接触这个,建立的是控制台的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丶希望越详细越好。
君之大恩,不胜感激!
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
百度网友2ee257f9
2014-11-08 · 超过28用户采纳过TA的回答
知道答主
回答量:189
采纳率:0%
帮助的人:50万
展开全部
设置监听socket的listen呢?
线程有自己的私有栈,即局部变量
更多追问追答
追问
设置了没写出来 listen(sockSrv, 5);接受连接,并创建进程是正常,一个客户端时完全正常,2个及以上就不能正常工作,但肯定都进入新线程了故障就是我说的那样
追答
if(recv(p->sk, rcbf, 50, 0)!=SOCKET_ERROR);//接受客户端消息,目测问题最大的地方、
printf("本次收到%s,from socket=%d",rcbf,p->sk);
第一句的分号

while(1){

gets(sdbuf);
send(sockClient,sdbuf,strlen(sdbuf),0);//解决乱码问题
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式