Unix 网络编程 SOCKET 的问题

vichord 2012-05-04 10:14:39
程序要求要在客户端循环输入操作符和操作数,在服务器端接收返回结果。
客户端需要多次输入,输入 Q终止操作。

服务器端的一个方法:
void operationServ(FILE *fp, int sockfd)
{
float readline[MAXLINE];
ssize_t n; // store the num of value that pass from the client
int i;
float* ptr;
float temp = 0;



// while( (n = read(sockfd, readline, MAXLINE)) > 0)
// {

again:
n = read(sockfd, readline, MAXLINE);
n = n / sizeof(float); // get the number of the values
printf("-----------------result = %d\n", (int)n);
switch((int)readline[0])
{
case 1:
{

// do some additions
temp = 0;
for(i = 2; i < n ; i++)
{
temp = readline[i] + temp;
}
printf("result = %f", temp);
write(sockfd, &temp, sizeof(float));
}
break;
case 2:
{
// do some subtractions
temp = 0;
for(i = 2; i < n; i++)
{
temp = temp - readline[i];
}
write(sockfd, &temp, sizeof(float));
}
break;
case 3:
{
// do some multiplications
temp = 1;
for(i = 2; i < n; i++)
{
temp = temp * readline[i];
}
write(sockfd, &temp, sizeof(float));
}
break;
case 4:
{
// do some divisions
temp = 1;
for(i = 2; i < n; i++)
{
temp = temp / readline[i];
}
write(sockfd, &temp, sizeof(float));
}
break;
default:
return;
break;
}

printf("\nresult = %d",(int)n);
goto again;
// }
}


单次的时候可用,但是用了GOTO做循环测试的时候就不可以用了。

请问为什么,如何解决?
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
如此美丽的你 2012-05-07
  • 打赏
  • 举报
回复
可能是缓冲区的问题!!!
justkk 2012-05-05
  • 打赏
  • 举报
回复
你说的不可用,有什么表现吗?
wangzhaoyang121 2012-05-04
  • 打赏
  • 举报
回复
在goto中break应该是没有用了吧,在用一个goto来跳出goto:again。
再说为什么喜欢有goto;
有更多错误信息吗?
vichord 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

在goto中break应该是没有用了吧,在用一个goto来跳出goto:again。
再说为什么喜欢有goto;
有更多错误信息吗?
[/Quote]
我用GOTO只是用来做测试而已……没有别的意思。
我原本的用意只是在服务器端做一个循环来接收客户端的信息。但是我发觉非常有问题。
我不知道为什么做单次的没有问题,做循环就出现运行错误。
qq120848369 2012-05-04
  • 打赏
  • 举报
回复
建议你使用select同时监听描述符0和服务器描述符。

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧