程序执行出错,求助!!!
学习编程,写了一个socket程序,client将int ch[10] 传给server,然后server对每一个ch[i]乘以十再返回给client,client将ch[i]打印到屏幕,但是我得结果总不对,请帮我看看,代码如下:
/**************************client.c****************************************/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int sockfd;
int len,i ;
struct sockaddr_in address;
int res;
int ch[10];
char *server_addr;
if (argc<2){
perror("too few arguments!!!");
exit(1);
}
server_addr = argv[1];
for(i=0;i<10;i++)
{
ch[i]=i;
}
// create a socket for the client
sockfd = socket ( AF_INET , SOCK_STREAM , 0 );
// name the socket
address.sin_family = AF_INET ;
address.sin_addr.s_addr = inet_addr(server_addr);
address.sin_port = 9999;
len = sizeof(address);
// connect to the server
res = connect (sockfd, (struct sockaddr *) &address, len);
if(res ==-1)
{
perror("oops:client2");
exit(1);
}
// now we can read and write via the socket
write(sockfd,ch, strlen(ch));
read(sockfd,ch, strlen(ch));
for(i=0;i<10;i++)
{
printf("ch[%d] from server is: %d",i,ch[i]);
}
close(sockfd);
}
/***************************server.c******************************/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/un.h>
int main()
{
int server_sockfd , client_sockfd;
int server_len , client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
int i;
// create a socket for the server
server_sockfd = socket ( AF_INET , SOCK_STREAM , 0 );
// name the socket
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("192.168.0.222");
server_address.sin_port = 9999;
server_len = sizeof(server_address);
bind (server_sockfd , (struct sockaddr *)&server_address, server_len);
// creat a queue for the comming clinet
listen(server_sockfd , 5);
while(1){
int ch[10];
printf("server waiting.\n");
// accept a connection
client_len = sizeof(client_address);
client_sockfd = accept (server_sockfd , ( struct sockaddr *) &client_address, &client_len);
// read and write on client
read(client_sockfd,ch,strlen(ch));
for(i=0;i<10;i++){
ch[i]*=10;
}
//printf("%d\n.",&ch);
write(client_sockfd ,ch,strlen(ch));
close(client_sockfd);
}
}
问题点数:20、回复次数:7Top
1 楼zzbwang()回复于 2005-06-01 09:43:40 得分 5
用socket通信时应该使用函数send和recv,而你用read和write.Top
2 楼zhoufanking(风铃)回复于 2005-06-01 12:19:05 得分 0
read 和write也是可以的吧!我用write和read 读写过字符并成功了啊Top
3 楼shockwave_115(采姑娘的小蘑菇)回复于 2005-06-01 17:29:51 得分 5
不知道你遍一问题还是运行问题
有两个程序问题
server_address.sin_port = 9999;//端口号不一定设置成功,要看运行时候是多少端口
//还有就是应该htons(9999);
另一个就是:
for(i=0;i<10;i++){
ch[i]*=10;}
你不一定读到了十个字符
还有你看看strlen(ch)是多少
你最好吧具体出错情况说一下Top
4 楼zhoufanking(风铃)回复于 2005-06-02 07:39:16 得分 0
是运行时出现的问题。结果是客户端的数组ch[10]里的数值没有改变,最后打印到屏幕的还是1到10,但是服务器端出了问题,打印出来的数据是乱的,我觉得应该是服务器端就没有真确的读到客户送来的这个数组。Top
5 楼shockwave_115(采姑娘的小蘑菇)回复于 2005-06-02 10:33:54 得分 5
数值没有变说明没有传输成功,不然肯定会有变化的Top
6 楼zhoufanking(风铃)回复于 2005-06-02 14:38:08 得分 0
应该是服务器端没有正确地接收到客户的数据,但是该怎么改呢!!Top
7 楼tb01412(tb)回复于 2005-06-05 00:01:12 得分 5
一般说来,在accept后需要派生一个单独的进程来处理数据!!!(或者是一个线程)
如果一次无法读取完所有数据,那么你可以考虑用循环读取的方式Top




