不工作的本地主机服务器的Socket程序 [英] Local Host Server Socket Program not working

查看:126
本文介绍了不工作的本地主机服务器的Socket程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

用C编写的

我有服务器和客户端s​​ocket编程我想客户端程序与服务器程序上的我的笔记本电脑使用本地主机的ip地址127.0.0.1 连接。当我执行服务器程序。其输出绑定失败而停止。如何使这可能是客户端连接到服务器上的同一台笔记本电脑,即通过本地主机。请帮助。

下面是服务器code(这是一个回声服务器程序):

 #包括LT&;&stdio.h中GT;
#包括LT&;&stdlib.h中GT;#包括LT&; SYS / socket.h中>#包括LT&; netinet / in.h中>#包括LT&; ARPA / inet.h>#包括LT&;&string.h中GT;主(INT ARGC,CHAR *的argv []){INT clilen,的sockfd,newsockfd,N,CPID;味精的char [100];结构SOCKADDR_IN serv_addr,CLI;如果((的sockfd =插座(AF_INET,SOCK_STREAM,0))小于0){的printf(插座未能建立起\\ n);出口(0);}的printf(创建插座\\ n);bzero((字符*)及serv_addr,sizeof的(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr(的argv [1]);serv_addr.sin_port = htons(与atoi(argv的[2]));如果(绑定(的sockfd,(结构sockaddr *)及serv_addr,sizeof的(serv_addr))小于0){的printf(绑定失败\\ n);出口(0);}的printf(结合建立\\ n);如果(听(的sockfd,5)℃,){的printf(不听\\ n);出口(0);}输出(听| N);对于(;;){clilen = sizeof的(CLI);如果((newsockfd =接受(的sockfd,(结构sockaddr *)及CLI,&安培; clilen))小于0){的printf(接受失败\\ n);出口(0);}的printf(接受\\ n);CPID = fork()的;如果(CPID == 0){N =读取(newsockfd,味精,80);味精[N] ='\\ 0';写(newsockfd,味精,strlen的(MSG));关闭(newsockfd);出口(0);}}}


解决方案

我相信已经发生的问题,因为你已经通过命令行传递错误的价值观。

如您所愿code以下行可能无法工作,

  serv_addr.sin_addr.s_addr = inet_addr(的argv [1]);

请其更改为

  servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

另外添加此检查测试端口号,

  unsigned int类型的端口;
如果(的argc 2)
{
   端口= Some_Port_No;
}
其他
{
   端口=与atoi(argv的[2]);
}

和变化

  serv_addr.sin_port = htons(与atoi(argv的[2]));

  servaddr.sin_port = htons(端口);

I have server and client socket programs written in C. I want to connect the client program with server program on my laptop using local host ipaddress 127.0.0.1. When i execute the server program. its output is binding failed and stops. How to make this possible that is client connecting to server on the same laptop ie through local host. Please Help.

Here is the Server Code(this is a echo server program):

#include<stdio.h>
#include<stdlib.h>

#include<sys/socket.h>

#include<netinet/in.h>

#include<arpa/inet.h>

#include<string.h>

main(int argc,char *argv[])

{ 

int clilen,sockfd,newsockfd,n,cpid;

char msg[100];

struct sockaddr_in serv_addr,cli;

if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)

{

printf("socket failed to establish\n");

exit(0);

}

printf("socket created\n");

bzero((char *)&serv_addr,sizeof(serv_addr));

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=inet_addr(argv[1]);

serv_addr.sin_port=htons(atoi(argv[2]));

if(bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)

{

printf("binding failed\n");

exit(0);

}

printf("binding established\n");

if(listen(sockfd,5)<0)

{

printf("not listening\n");

exit(0);

}

printf("listening|n");

for(;;)

{

clilen=sizeof(cli);

if((newsockfd=accept(sockfd,(struct sockaddr *)&cli,&clilen))<0)

{

printf("accept failed\n");

exit(0);

}

printf("accepted\n");

cpid=fork();

if(cpid==0)

{

n=read(newsockfd,msg,80);

msg[n]='\0';

write(newsockfd,msg,strlen(msg));

close(newsockfd);

exit(0);

}

}

}

解决方案

I believe the problem has occurred because you have passed wrong values through the command line.

The following line of code may not have worked as you expect,

serv_addr.sin_addr.s_addr=inet_addr(argv[1]);

Please change it to

 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

Also add this check to test the port number,

unsigned int port;
if ( argc < 2 ) 
{
   port = Some_Port_No;
}
else 
{
   port=atoi(argv[2]);
}

And change

serv_addr.sin_port=htons(atoi(argv[2]));

to

servaddr.sin_port = htons(port); 

这篇关于不工作的本地主机服务器的Socket程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆