当前位置: 技术问答>linux和unix
帮忙看下socket中的accept函数的问题(只剩30分了,大家别嫌少哈)
来源: 互联网 发布时间:2016-11-03
本文导语: 我原来跑通过这个程序,后来不知道怎么了就是不行,源码如下: 头文件太占地方,我就不写出来了。 防火墙都关了,能ping通 //service.c void main() { pid_t fd; int listenmessage,recvmessage; int listensock,connsock; char re...
我原来跑通过这个程序,后来不知道怎么了就是不行,源码如下:
头文件太占地方,我就不写出来了。
防火墙都关了,能ping通
//service.c
void main()
{
pid_t fd;
int listenmessage,recvmessage;
int listensock,connsock;
char recvbuff[100]; //定义要接收的数据缓冲区
struct sockaddr_in serveraddr; //定义网络套接字地址结构
listensock = socket(AF_INET,SOCK_STREAM,0); //创建一个套接字,用于监听
bzero(&serveraddr,sizeof(struct sockaddr)); //地址结构清零
serveraddr.sin_family = AF_INET; //指定使用的通讯协议族
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //指定接受任何连接
serveraddr.sin_port = htons(5000); //指定监听的端口
bind(listensock,(struct sockaddr *)&serveraddr,sizeof(struct sockaddr_in));//给套接口邦定地址
listenmessage=listen(listensock,1024); //开始监听
printf("Listen is %d n",listenmessage);
connsock = accept(listensock,(struct sockaddr *)NULL, NULL);
//建立通讯的套接字,accept函数,等待客户端程序使用connect函数的连接
printf("accept is %d!n",connsock);
recv(connsock,recvbuff,sizeof(recvbuff),0); //接收服务器的数据
printf("recv is %d!n",recvmessage);
printf("%sn",recvbuff); //打印接收到的数据
sleep(2);
close(connsock); //关闭通讯套接字
close(listensock); //关闭监听套接字
}
//还有个client.c
int main(int argc,char **argv)
{
pid_t fd;
int sendmessage,connectmessage;
const char buff[] = "Hello! Welcome here gggggggggggg!rn"; //定义要发送的数据缓冲区;
int sockfd,connsock; //定义一个socket套接字,用于通讯
struct sockaddr_in serveraddr;//定义网络套接字地址结构
if(argc!= 2)
{
printf("Usage: echo ip地址");
exit(0);
}
sockfd =socket(AF_INET,SOCK_STREAM,0); //创建一个套接字
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET; //指定使用的通讯协议族
serveraddr.sin_port = htons(5000);//指定要连接的服务器的端口
inet_pton(AF_INET, argv[1], &serveraddr.sin_addr);
printf("OK sendto ip is %sn",argv[1]);
connectmessage=connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); //连接服务器
printf("connet is %dn",connectmessage);
sendmessage=send(sockfd,buff,sizeof(buff), 0);//向客户端发送数据
printf("sendmessage is %d !n",sendmessage);
close(sockfd); //关闭套接字
printf("over now!!!n");
return(0);
}
service端输入
./service
client端输入
./client 192.168.0.10
client.c能正常运行,service.c卡在红色位置了,请问是怎么回事呢?
头文件太占地方,我就不写出来了。
防火墙都关了,能ping通
//service.c
void main()
{
pid_t fd;
int listenmessage,recvmessage;
int listensock,connsock;
char recvbuff[100]; //定义要接收的数据缓冲区
struct sockaddr_in serveraddr; //定义网络套接字地址结构
listensock = socket(AF_INET,SOCK_STREAM,0); //创建一个套接字,用于监听
bzero(&serveraddr,sizeof(struct sockaddr)); //地址结构清零
serveraddr.sin_family = AF_INET; //指定使用的通讯协议族
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //指定接受任何连接
serveraddr.sin_port = htons(5000); //指定监听的端口
bind(listensock,(struct sockaddr *)&serveraddr,sizeof(struct sockaddr_in));//给套接口邦定地址
listenmessage=listen(listensock,1024); //开始监听
printf("Listen is %d n",listenmessage);
connsock = accept(listensock,(struct sockaddr *)NULL, NULL);
//建立通讯的套接字,accept函数,等待客户端程序使用connect函数的连接
printf("accept is %d!n",connsock);
recv(connsock,recvbuff,sizeof(recvbuff),0); //接收服务器的数据
printf("recv is %d!n",recvmessage);
printf("%sn",recvbuff); //打印接收到的数据
sleep(2);
close(connsock); //关闭通讯套接字
close(listensock); //关闭监听套接字
}
//还有个client.c
int main(int argc,char **argv)
{
pid_t fd;
int sendmessage,connectmessage;
const char buff[] = "Hello! Welcome here gggggggggggg!rn"; //定义要发送的数据缓冲区;
int sockfd,connsock; //定义一个socket套接字,用于通讯
struct sockaddr_in serveraddr;//定义网络套接字地址结构
if(argc!= 2)
{
printf("Usage: echo ip地址");
exit(0);
}
sockfd =socket(AF_INET,SOCK_STREAM,0); //创建一个套接字
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET; //指定使用的通讯协议族
serveraddr.sin_port = htons(5000);//指定要连接的服务器的端口
inet_pton(AF_INET, argv[1], &serveraddr.sin_addr);
printf("OK sendto ip is %sn",argv[1]);
connectmessage=connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); //连接服务器
printf("connet is %dn",connectmessage);
sendmessage=send(sockfd,buff,sizeof(buff), 0);//向客户端发送数据
printf("sendmessage is %d !n",sendmessage);
close(sockfd); //关闭套接字
printf("over now!!!n");
return(0);
}
service端输入
./service
client端输入
./client 192.168.0.10
client.c能正常运行,service.c卡在红色位置了,请问是怎么回事呢?
|
如果你的Server卡在accept的地方,
你的Client怎么可能正常运行能,Client连接Server的时候,应该返回一个error才对啊。
卡在accept的那个地方,网络是通的吗?你ping过没有?
你的Client怎么可能正常运行能,Client连接Server的时候,应该返回一个error才对啊。
卡在accept的那个地方,网络是通的吗?你ping过没有?
|
所有函数调用加返回值判断一下,bind()调用成功了吗?
|
同步socket,先运行服务器端,在用客户端连接。
服务器端一直在等待客户端连接,调试一下就知道了。
服务器端一直在等待客户端连接,调试一下就知道了。
|
perror看下错误信息
|
六脉神剑哈
网络自身没有问题吧
网络自身没有问题吧