「TCP/UDP」一个端口号可以同时被两个进程绑定吗? 您所在的位置:网站首页 一个进程可以对应几个程序吗 「TCP/UDP」一个端口号可以同时被两个进程绑定吗?

「TCP/UDP」一个端口号可以同时被两个进程绑定吗?

2024-05-23 09:12| 来源: 网络整理| 查看: 265

一、1个端口号可以同时被两个进程绑定吗?

根据端口号的绑定我们分以下几种情况来讨论:

2个进程分别建立TCP server,使用同一个端口号8888 2个进程分别建立UDP server,使用同一个端口号8888 2个进程1个建立TCP server、1个建立UDP server,都使用端口号8888 1. 测试代码

我们首先编写两个简单的测试程序。

tcp.c

该程序仅仅创建tcp套接字并绑定端口号8888,没有accept建立连接操作,并且sleep(1000),让进程不要太快退出。

/*******服务器程序 TCPServer.c ************/ #include #include #include #include #include #include #include #include #include #define WAITBUF 10 #define RECVBUFSIZE 1024 int main(int argc, char *argv[]) { int sockfd,new_fd,nbytes; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int portnumber = 8888; socklen_t sin_size; char hello[512]; char buffer[RECVBUFSIZE]; /*端口号不对,退出*/ /*服务器端开始建立socket描述符*/ if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { fprintf(stderr,"Socket error:%s\n\a",strerror(errno)); exit(1); } /*服务器端填充 sockaddr结构*/ bzero(&server_addr,sizeof(struct sockaddr_in)); server_addr.sin_family=AF_INET; /*自动填充主机IP*/ server_addr.sin_addr.s_addr=htonl(INADDR_ANY); server_addr.sin_port=htons(portnumber); /*捆绑sockfd描述符 进程+端口号+ip+socket*/ if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) { fprintf(stderr,"Bind error:%s\n\a",strerror(errno)); exit(1); } /*监听sockfd描述符*/ if(listen(sockfd, WAITBUF)==-1) { fprintf(stderr,"Listen error:%s\n\a",strerror(errno)); exit(1); } sleep(1000);//让程序不要这么快的退出 close(sockfd); exit(0); }

udp.c

该程序仅仅创建udp套接字并绑定端口号8888,没有accept建立连接操作,并且sleep(1000),让进程不要太快退出.

#include #include #include #include #include #include #include #include #include #include #define SERVER_PORT 8888 #define MAX_MSG_SIZE 1024 int main(void) { int sockfd; struct sockaddr_in addr; /* 服务器端开始建立socket描述符 */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有