在UDP中使用connect
2009-11-12 09:24
267 查看
[转]UDP和socket函数(绑定端口)
UDP是一个无连接的协议,因此socket函数connect似乎对UDP是没有意义的,
然而事实不是这样。
一个插口有几个属性,其中包括协议,本地地址/端口,目的地址/端口。
对于UDP来说,socket函数建立一个插口;bind函数指明了本地地址/端口
(包括ADDR_ANY,通配所有本地网络接口);connect可以用来指明目的地
址/端口;
一般来说,UDP客户端在建立了插口后会直接用sendto函数发送数据,需要
在sendto函数的参数里指明目的地址/端口。如果一个UDP客户端在建立了插
口后首先用connect函数指明了目的地址/端口,然后也可以用send函数发送
数据,因为此时send函数已经知道对方地址/端口,用getsockname也可以得
到这个信息。
UDP客户端在建立了插口后会直接用sendto函数发送数据,还隐含了一个操作,
那就是在发送数据之前,UDP会首先为该插口选择一个独立的UDP端口(在1024
-5000之间),将该插口置为已绑定状态。如果一个UDP客户端在建立了插口后
首先用bind函数指明了本地地址/端口,也是可以的,这样可以强迫UDP使用指
定的端口发送数据。(事实上,UDP无所谓服务器和客户端,这里的界限已经模
糊了。)
UDP服务器也可以使用connect,如上面所述,connect可以用来指明目的地址
/端口;这将导致服务器只接受特定一个主机的请求
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rissonal/archive/2008/08/22/2816690.aspx
程序举例:
UDP是一个无连接的协议,因此socket函数connect似乎对UDP是没有意义的,
然而事实不是这样。
一个插口有几个属性,其中包括协议,本地地址/端口,目的地址/端口。
对于UDP来说,socket函数建立一个插口;bind函数指明了本地地址/端口
(包括ADDR_ANY,通配所有本地网络接口);connect可以用来指明目的地
址/端口;
一般来说,UDP客户端在建立了插口后会直接用sendto函数发送数据,需要
在sendto函数的参数里指明目的地址/端口。如果一个UDP客户端在建立了插
口后首先用connect函数指明了目的地址/端口,然后也可以用send函数发送
数据,因为此时send函数已经知道对方地址/端口,用getsockname也可以得
到这个信息。
UDP客户端在建立了插口后会直接用sendto函数发送数据,还隐含了一个操作,
那就是在发送数据之前,UDP会首先为该插口选择一个独立的UDP端口(在1024
-5000之间),将该插口置为已绑定状态。如果一个UDP客户端在建立了插口后
首先用bind函数指明了本地地址/端口,也是可以的,这样可以强迫UDP使用指
定的端口发送数据。(事实上,UDP无所谓服务器和客户端,这里的界限已经模
糊了。)
UDP服务器也可以使用connect,如上面所述,connect可以用来指明目的地址
/端口;这将导致服务器只接受特定一个主机的请求
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rissonal/archive/2008/08/22/2816690.aspx
程序举例:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> #define SA struct sockaddr #define PORT 8888 void err_sys(const char *errmsg); int main(int argc, char **argv) { int error; int sockfd; ssize_t n; char buf[BUFSIZ] = "fanyunfei"; struct sockaddr_in servaddr; if (argc != 2) { fprintf(stderr, "Usage: ./p/1 serverIP/n"); exit(1); } sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sockfd == -1) err_sys("socket"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); error = inet_pton(AF_INET, argv[1], &servaddr.sin_addr); if (error <= 0) err_sys("inet_pton"); error = connect(sockfd, (SA *)&servaddr, sizeof(servaddr)); if (error == -1) err_sys("connect"); if (write(sockfd, buf, strlen(buf)) != strlen(buf)) err_sys("write"); if ((n = read(sockfd, buf, BUFSIZ)) == -1) err_sys("read"); else if (write(STDOUT_FILENO, buf, n) != n) err_sys("write"); exit(0); } void err_sys(const char *errmsg) { perror(errmsg); exit(1); }
相关文章推荐
- 使用UDP的connect获取本机IP
- UDP socket也可以使用connect系统调用
- 在udp中使用connect:
- UDP中使用connect
- UDP 配合 connect 的使用
- 使用udp_client或者udp_connect和udp_server 的时间获取函数
- UDP中使用bind和connect的作用
- UDP协议中是否可以使用connect
- UDP使用connect()
- UDP服务器也可以使用connect()
- UDP 服务端与客户端均可以bind()绑定端口, 并且可以使用connect()链接后,使用send()与recv()方法!
- UDP 配合 connect 的使用
- UDP 使用 connect
- connect()函数不是TCP的专用,UDP中同样可以使用
- UDP socket编程中使用connect
- UDP中使用connect
- UDP socket也可以使用connect系统调用
- UDP使用connect系统调用
- Linux网络编程--使用epoll模型同时处理tcp和udp服务
- 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。