永发信息网

写了一个服务端,开线程对客户端发送数据。不知道为什么每次都是数据发送到一半退出

答案:2  悬赏:10  手机版
解决时间 2021-03-19 23:12
程序如下:
static int sockfd;
static int ss;
void sig_exit(int signo){
close(sockfd);
printf("exit!\n");
exit(0);
}
void* Pthread_client(void* fd){
int i;
int sfd=*(int*)fd;
char buff[10] = {0};
char buf[1024]={1};
if(read(sfd, buff, sizeof(buf))> 0)
for(i=0; iwrite(sfd ,buf, sizeof(buf));
}
int main(int argc , char* argv[]){
signal(SIGINT,sig_exit);
printf("take Ctrl+C to exit!");
ss=atoi(argv[1]);
//creat socket
sockfd = socket(PF_INET, SOCK_STREAM, 0);
if(sockfd == -1)perror("create socket failed!"),exit(-1);
//address
struct sockaddr_in addr;
addr.sin_family = PF_INET;
addr.sin_port = htons(7000);
addr.sin_addr.s_addr = INADDR_ANY;
//bind
int ret=bind(sockfd,(struct sockaddr*)&addr,sizeof(addr));
if(ret == -1)perror("bind error!"),exit(-1);
//listen
if(listen(sockfd, 100) == -1)
perror("listen error!"),exit(-1);
//wait client
while(1){
struct sockaddr_in fromaddr;
socklen_t len = sizeof(fromaddr);
int fd = accept(sockfd, (struct sockaddr*)&fromaddr,&len);
if(fd == -1)perror("accept error!"),exit(-1);
pthread_t id;
pthread_create(&id,0,Pthread_client,(void*)&fd);
}
pause();
return 0;
}
最佳答案
你客户端的代码呢?是不是客户端的fd被关掉了?
你这是读一次写多次是吧?
if(read(sfd, buff, sizeof(buf))> 0)
for(i=0; i write(sfd ,buf, sizeof(buf));//写ss次
}
全部回答
你好! 有出什么异常么 你可以打个断点看看 看它一步一步的执行 用debug来看 打字不易,采纳哦!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么我的游戏老是更新不了,所有游戏更新都
请问怎么查询谁给我开的QQ黄钻
梦见洪水过后满地都是鱼跳来跳去
天猫手机怎样货到付款
从德州办的建行的银行卡,家人从德州给我打钱
一般中介一个几百的qq号中介费用多少
什么样的鼻子最标准?
天之蓝宾馆我想知道这个在什么地方
起亚锐欧车正时皮带多少公里或者多长时
英雄美工钢笔哪款好
权威性是什么意思
高龄补助是分地方吗?我家南充市营山县没有高
用手机怎么看到无线路由器的密码
泰宁动车站到汽车站的距离 急!!!!
lol英雄什么时候重做
推荐资讯
高级测量员证和工程测量证有什么区别
2018珠海圆明新园里面摆摊要收费吗?
河北省英语ab级考试成绩在哪里查,什么时候可
成语猜猜丞相第二十一关百度知道
coc中雷电法能劈大本营吗?两个4级雷电法术能
药材山西可因种植什么
请问,我的爱问上显示有一条新消息,可是进去
lol上打小兵 是只要最后一击是自己杀的就有钱
二战德国和日本的作战飞机
学厨师,需要多长时间,花多少钱?
友信的通话记录能在话费清单查到吗
画一个直径是2厘米的圆,再画出它的对称轴,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?