Chinaunix

标题: 关于linux下的网络编程 [打印本页]

作者: qdcanyun    时间: 2011-11-18 01:49
标题: 关于linux下的网络编程
最近在学习linux环境下的网络编程 但是对socket还是不甚了解
这是我完成的第一个代码
功能:使用udp报文 能够接受一个字符串
这个是server

遇到问题有下:
1.如果将recvfrom放置在像for  (;中 ,则无法接受任何数据
2.如何知道该如何监听本机的端口
个人理解 作为一台server ,需要知道三个端口 udp源端口 udp目的端口 还有需要在本机上有一个端口用来收udp数据报 在以下代码中如何体现
像各位大牛求教
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<sys/types.h>
  4. #include<netinet/in.h>
  5. #include<sys/wait.h>
  6. #include<sys/socket.h>

  7. int main(){
  8.         int serverPort,clientPort;
  9.         struct sockaddr_in servAddr,clientAddr,unknown,local;
  10.         int serverLen,clientLen;
  11.         int sockfd,recvlen;
  12.         char buff[100];

  13.         sprintf(buff,"hello world");

  14.         sockfd = socket(AF_INET,SOCK_DGRAM,0);
  15.         
  16.         bzero(&servAddr,sizeof(servAddr));

  17.         servAddr.sin_family = AF_INET;
  18.         servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
  19.         servAddr.sin_port = htons(1234);


  20.         bzero(&clientAddr,sizeof(clientAddr));

  21.         clientAddr.sin_family = AF_INET;
  22.         clientAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
  23.         clientAddr.sin_port = htons(1234);
  24.         
  25.         local.sin_family = servAddr.sin_family;
  26.         local.sin_addr.s_addr = servAddr.sin_addr.s_addr;
  27.         local.sin_port = servAddr.sin_port;

  28.         bind(sockfd,&local,sizeof(local));
  29.         while (1){
  30.         recvlen = recvfrom(sockfd,buff,100,0,&unknown,sizeof(unknown));
  31.         buff[recvlen] = 0;
  32.         printf("receive message is %s\n",buff);
  33.         }
  34.         close(sockfd);        

  35.         return 0;
  36. }
复制代码

作者: file3    时间: 2011-11-18 09:07
使用getsockname可以看本機使用的那個端口與ip
作者: zcheung    时间: 2011-11-18 15:36


你怎麽又跑到這裏展示你的智無敵來了?


在另一個版塊我已經很好的回答了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2