当前位置:  技术问答>linux和unix

大家帮我看一个socket编程的问题,高分奉送

    来源: 互联网  发布时间:2014-12-22

    本文导语:  为什么不能为套接口绑定地址 bind函数好像不起作用啊,急 #include  #include  #include  #include  #include  #include  #include  #include  #include  static void bail(const char *on_what) {   fputs(on_what, stderr);   fputs("n", stderr);   exit...

为什么不能为套接口绑定地址
bind函数好像不起作用啊,急

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

static void bail(const char *on_what)
{
  fputs(on_what, stderr);
  fputs("n", stderr);
  exit(1);
}

int main(int argc, char** argv)
{
  int z;
  struct sockaddr_in adr_inet;
  int len_inet;
  int sck_inet;

  sck_inet = socket(AF_INET, SOCK_STREAM, 0);

  if(sck_inet == -1)
    bail("sccket()");

  memset(&adr_inet, 0, sizeof adr_inet);

  adr_inet.sin_family = AF_INET;
  adr_inet.sin_port = htons(9000);

  if(!inet_aton("127.0.0.23", &adr_inet.sin_addr))
    bail("bad address.");

  len_inet = sizeof adr_inet;

  z = bind(sck_inet, (struct sockaddr*)&adr_inet, len_inet);

  if(z == -1)
    bail("bind()");

  system("netstat -pa --tcp 2>/dev/null|"
    "sed -n '1,/^Proto/p;/bind/p'");

  return 0;
}

|
bind函数调用成功返回0,失败返回-1 并置errno.其失败的原因可能是指定的地址格式不正确或套接字已经捆绑有名字!!
如果,bind函数没有捕获错误,可能是根本就没有执行bind命令.你可以在程序前面设置跟踪,先看看bind前程序的执行情况.再说吧!!

|
1。你的主机有127.0.0.23这样的地址吗???
2。如果你不需要明确指定地址,那么只需这样设置
adr_inet.sin_addr=htonl(INADDR_ANY);

|
主要是bind的长度不对,应该是sizeof(struct sockaddr)

看一段
void *SocketServer(void *arg)
{
struct sockaddr_in my_addr; /* 本机地址信息 */  
struct sockaddr_in their_addr; /* 客户地址信息 */  
int sockfd,new_fd; /* 监听socket: sock_fd,数据传输socket:new_fd*/  
int i,sin_size=1;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { /*错误检测 */  
perror("socket");
return NULL;
}  
my_addr.sin_family=AF_INET;  
my_addr.sin_port=htons(MYPORT);  
my_addr.sin_addr.s_addr = INADDR_ANY;  
bzero(&(my_addr.sin_zero),8);  
if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&sin_size,sizeof(int))==-1)/*地址可重用*/
{
perror("setsockopt");
return NULL;
}
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {/*错误检测*/  
perror("bind");
return NULL; 
}  
if (listen(sockfd, MAXCONNECT) == -1) {/*错误检测*/  
perror("listen");
return NULL;
}
sin_size = sizeof(struct sockaddr_in);  
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr,&sin_size)) == -1) {  
perror("accept");
return NULL;
}
printf("nserver: got connection from %sn",inet_ntoa(their_addr.sin_addr));  
printf("server: new_fd= %dn",new_fd);  
return NULL;
}


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • socket 编程时,write的写入的数据大于socket缓冲区,会有什么结果??
  • Linux下使用openssl api编程socket编程,为什么要编译啊?
  • 关于文件操作和Socket网络编程!
  • linux下socket编程问题!
  • socket编程 中的bind问题
  • socket编程--htons
  • 急!!请教关于linux socket编程的一个问题!!
  • 急!关于SOCKET编程,在线等待!
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • 多进程socket编程问题
  • 问一个socket编程问题,急~~~
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • 请教一个socket编程问题
  • 求助!!linux下socket编程
  • socket编程,使用recvfrom()函数监听问题。
  • Web服务器/前端 iis7站长之家
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3