利用Socket編程,使用bind函式將同一埠系結給兩個應用具體代碼怎樣寫,求助大神?
uj5u.com熱心網友回復:
#include <stdio.h>#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define MAXLINE 50
typedef struct sockaddr SA;
int main(int argc, char **argv)
{
int listenfd,connfd, maxfd,i , nbyte;
struct sockaddr_in myaddr;
char buf[MAXLINE];
fd_set global_rdfs,current_rdfs;
if((listenfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
perror("fail to socket");
exit(-1);
}
bzero(&myaddr, sizeof(myaddr));
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(8888);
//myaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(listenfd,(SA *)&myaddr,sizeof(myaddr)) < 0)
{
perror("bind fail");
close(listenfd);
exit(-1);
}
listen(listenfd,5);
FD_ZERO(&global_rdfs);
FD_SET(listenfd,&global_rdfs);
maxfd = listenfd;
while(1)
{
current_rdfs = global_rdfs;
printf("before select\n");
if(select(maxfd+1,¤t_rdfs,NULL,NULL,0) < 0)
{
perror("select fail");
close(listenfd);
exit(-1);
}
else
{
printf("after select\n");
for(i = 0; i <= maxfd; i++)
{
if(FD_ISSET(i,¤t_rdfs))
{
if(i == listenfd)
{
connfd = accept(listenfd,NULL,NULL);
FD_SET(connfd,&global_rdfs);
maxfd = maxfd > connfd ? maxfd : connfd;
}
else
{
nbyte = recv(i,buf,sizeof(buf),0);
buf[nbyte] = 0x00;
if(nbyte <= 0)
{
close(i);
FD_CLR(i,&global_rdfs);
}
else
{
// buf[nbyte] = 0x00;
send(i,buf,nbyte, 0);
}
}
}
}
}
}
return 0;
}
uj5u.com熱心網友回復:
可以實作一個服務器同時接受多個多個客戶的請求,具體的回應可以修改,這里用了echo功能。并發服務器要考慮到多種情況,仔細分析uj5u.com熱心網友回復:
兩個行程間建立通訊,一個行程系結埠,且提供回呼介面,
另一個行程注冊介面.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/148022.html
標籤:網絡協議與配置
