读书人

套接字客户服务器的传输有关问题

发布时间: 2012-12-31 11:57:52 作者: rapoo

套接字客户服务器的传输问题
客户程序代码

 
include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<sys/un.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
int sockfd;
int len;
struct sockaddr_un address;
int result;
char ch='A';

sockfd=socket(AF_UNIX,SOCK_STREAM,0);
//给套接字命名
address.sun_family=AF_UNIX;
strcpy(address.sun_path,"server_socket");
len=sizeof(address);

//将套接字连接到服务器
result=connect(sockfd,(struct sockaddr*)&address,len);

if(result==-1)
{
perror("oops:client1");
exit(EXIT_FAILURE);
}
//通过套接字进行读写
write(sockfd,&ch,1);
read(sockfd,&ch,1);
printf("char form server =%c\n",ch);
close(sockfd);
exit(EXIT_SUCCESS);

}



服务器程序代码:
#includeisys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<sys/un.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
int server_sockfd, client_sockfd;
int server_len,client_len;
struct sockaddr_un server_address;
struct sockaddr_un client_address;

//删除以前的套接字,为服务器创建一个未命名的套接字
unlink("server_socket");
server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);

//命名套接字
server_address.sun_family=AF_UNIX;
strcpy(server_address.sun_path,"server_socket");
server_len=sizeof(server_address);
bind(server_sockfd,(struct address*)&server_address,server_len);


listen(server_sockfd,5);
while(1)
{
char ch;
printf("server waiting\n");
//接受一个请求
client_len=sizeof(client_address);
client_sockfd=accept(server_sockfd,(structsockaddr*)&client_address,&client_len);


read(client_sockfd,&ch,1);
ch++;
write(client_sockfd,&ch,1);
close(client_sockfd);
}
exit(EXIT_SUCCESS);
}





客服程序 通过 套接字 写入一个字符A 服务器程序返回字符B

我想问的是 关于客服程序中的 write()和read()
客服程序向通过套接字写入字符后又立刻读取,怎么确定读取的一定是 服务器已经处理过的呢
这之间有什么机制么,还是阻塞了直到服务器讲处理后的字符返回。

本人新手 希望可以解释的清楚点
[解决办法]
你客户端write后,可以将ch赋值为别的值或者清空。不然的话你read失败ch还是A。write、read默认情况下是阻塞的。

[解决办法]
客户端写完一个字符后执行read(sockfd,&ch,1);这一句是会阻塞,直到读到从服务器端的返回或出错为止,通过判断函数的返回值确定是成功读取还是出错了,修改如下:
if(read(sockfd,&ch,1) < 0)
{
printf("error!\n");
exit(0);
}
else
{
printf("char form server =%c\n",ch);
}

学习编程还是要看看书的,学习网络推荐看看<UNIX网络编程>,最好也看看<UNIX环境高级编程>,这都是编程必看书,大多问题看书都能解决。

读书人网 >UNIXLINUX

热点推荐