Chinaunix首页 | 论坛 | 博客
  • 博客访问: 558999
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-11-03 15:45:14

在UDP套接字上调用connect是一个完全的本地操作,并不给对端主机发送任何信息,只是保存对端的IP地址和端口号,并且同时也将给出了本端的IP地址和端口。

点击(此处)折叠或打开

  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <sys/socket.h>
  5. #include <sys/types.h>
  6. #include <arpa/inet.h>
  7. #include <string.h>
  8. #define MAXLINE 1024
  9. int main(int argc, char* argv[])
  10. {
  11.     int fd;
  12.     int n;
  13.     struct sockaddr_in server;
  14.     char re[MAXLINE];
  15.     char se[1024];
  16.     socklen_t len;
  17.     struct sockaddr_in client;

  18.     fd = socket(AF_INET,SOCK_DGRAM,0);

  19.     if(fd < 0) {
  20.         printf("socket error\n");
  21.     }


  22.     server.sin_family = AF_INET;
  23.     server.sin_port = htons(20000);
  24.     inet_pton(AF_INET,"10.155.3.243",&server.sin_addr);
  25.     if(connect(fd,(struct sockaddr*)&server,sizeof(server)) < 0) {
  26.         printf("connect refused\n");
  27.     }
  28.     len = sizeof(client);
  29.     getsockname(fd,(struct sockaddr*)&client,&len);
  30.     printf("local address %s:%d\n",inet_ntoa(client.sin_addr),client.sin_port);

  31.     while(fgets(se,1024,stdin)!=NULL)
  32.     {
  33.         write(fd,se,strlen(se));
  34.         n = read(fd,re,1024);
  35.         re[n] = '\0';
  36.         if(n >0)
  37.             fputs(re,stdout);
  38.     }
  39.     return 0;
  40. }
编译运行:
gwwu@hz-dev2.wgw.com:~/test/socket/udp>gcc -g connect_udpclient.c -o connect_udpclient -Wall
gwwu@hz-dev2.wgw.com:~/test/socket/udp>./connect_udpclient 
local address 10.155.3.246:17878

另外在某些系统中,如果服务器端对应的服务没有启动,那么对于已连接的UDP,将会在该套接字上收到服务器发送的ICMP端口不可达的报文,并提示“connection refused”。但是很可惜,笔者在test的环境中没有模拟出,应该是系统不支持吧!
阅读(703) | 评论(0) | 转发(0) |
0

上一篇:UDP 服务器进程未运行

下一篇:raw socket

给主人留下些什么吧!~~