电子科技大学网络编程作业多线程3Word文档下载推荐.docx

上传人:b****2 文档编号:15168038 上传时间:2022-10-28 格式:DOCX 页数:7 大小:148.18KB
下载 相关 举报
电子科技大学网络编程作业多线程3Word文档下载推荐.docx_第1页
第1页 / 共7页
电子科技大学网络编程作业多线程3Word文档下载推荐.docx_第2页
第2页 / 共7页
电子科技大学网络编程作业多线程3Word文档下载推荐.docx_第3页
第3页 / 共7页
电子科技大学网络编程作业多线程3Word文档下载推荐.docx_第4页
第4页 / 共7页
电子科技大学网络编程作业多线程3Word文档下载推荐.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

电子科技大学网络编程作业多线程3Word文档下载推荐.docx

《电子科技大学网络编程作业多线程3Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子科技大学网络编程作业多线程3Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。

电子科技大学网络编程作业多线程3Word文档下载推荐.docx

unistd.h>

pthread.h>

sys/types.h>

sys/socket.h>

netinet/in.h>

arpa/inet.h>

#definePORT9999

#defineBACKLOG2

#defineMAXDATASIZE100

voidprocess_cli(intconnectfd,structsockaddr_inclient);

void*start_routine(void*arg);

structARG{

intconnfd;

structsockaddr_inclient;

};

intmain(void)

{

intlistenfd,connectfd;

pthread_ttid;

structARG*arg;

structsockaddr_inserver,client;

intsin_size;

if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1)

{

perror("

Createsocketfailed."

);

exit(-1);

}

intopt=SO_REUSEADDR;

setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&

opt,sizeof(opt));

bzero(&

server,sizeof(server));

server.sin_family=AF_INET;

server.sin_port=htons(PORT);

server.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(listenfd,(structsockaddr*)&

server,sizeof(structsockaddr))==-1){

Binderror."

if(listen(listenfd,BACKLOG)==-1){

listenerror."

sin_size=sizeof(structsockaddr_in);

while

(1){

if((connectfd=accept(listenfd,(structsockaddr*)&

client,&

sin_size))==-1)

{

perror("

accepterror."

exit(-1);

}

arg=(structARG*)malloc(sizeof(structARG));

arg->

connfd=connectfd;

memcpy((void*)&

arg->

client,&

client,sizeof(client));

if(pthread_create(&

tid,NULL,start_routine,(void*)arg))

Creatpthreaderror."

close(listenfd);

}

voidprocess_cli(intconnectfd,structsockaddr_inclient){

charrecvbuf[MAXDATASIZE],sendbuf[MAXDATASIZE],client_name[MAXDATASIZE];

intrecvlen,i;

printf("

Yougotaconnectionfrom%s.\n"

inet_ntoa(client.sin_addr));

send(connectfd,"

Welcometomyserver.\n"

22,0);

recvlen=recv(connectfd,client_name,MAXDATASIZE,0);

if(recvlen==0)

close(connectfd);

clientdisconnectde.\n"

return;

elseif(recvlen<

0)

clientbroked.\n"

client_name[recvlen]='

\0'

;

Clientnameis%s.\n"

client_name);

while(recvlen=recv(connectfd,recvbuf,MAXDATASIZE,0))

recvbuf[recvlen]='

Receivedclient<

%s>

message:

%s"

client_name,recvbuf);

for(i=0;

i<

recvlen;

i++)

sendbuf[i]=recvbuf[recvlen-i-1];

sendbuf[recvlen]='

send(connectfd,sendbuf,strlen(sendbuf),0);

Client:

%sdisconnected.\n"

void*start_routine(void*arg){

structARG*info;

info=(structARG*)arg;

process_cli(info->

connfd,info->

client);

free(arg);

pthread_exit(NULL);

客户端:

netdb.h>

#definePORT9999

intmain(intargc,char*argv[])

intfd,numbytes;

charbuf[MAXDATASIZE];

structhostent*he;

structsockaddr_inserver;

inti=1;

if(argc!

=2)

printf("

Usage:

%s<

IPaddress>

\n"

argv[0]);

if((he=gethostbyname(argv[1]))==NULL)

perror("

gethostbynameerror."

exit(-1);

if((fd=socket(AF_INET,SOCK_STREAM,0))==-1)

exit

(1);

server.sin_addr=*((structin_addr*)he->

h_addr);

if(i=connect(fd,(structsockaddr*)&

server,sizeof(structsockaddr))==-1)

connectfailed."

if(((numbytes=recv(fd,buf,MAXDATASIZE,0))==-1)){

recverror."

buf[numbytes]='

ServerMessage:

buf);

Pleaseinputyourname:

"

scanf("

%s"

if(((numbytes=send(fd,buf,strlen(buf),0))==-1)){

senderror."

while

(1)

Pleaseinputmessage(maxchar:

%d):

MAXDATASIZE);

if(strlen(buf)<

1)

i=0;

readerror."

Servermessage:

%s\n"

close(fd);

实验结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1