网络编程Word文档格式.docx
《网络编程Word文档格式.docx》由会员分享,可在线阅读,更多相关《网络编程Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
![网络编程Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/29/fdf170d9-73e3-4caf-94bd-4386a33e2bcd/fdf170d9-73e3-4caf-94bd-4386a33e2bcd1.gif)
charbuf[MAXDATASIZE];
charrvbuf[MAXDATASIZE];
structhostent*he;
structsockaddr_inserver;
if(argc!
=2)
{
printf("
Usage:
%s<
IPaddress>
\n"
argv[0]);
exit(-1);
}
if((he=gethostbyname(argv[1]))==NULL){
perror("
gethostbynameerror."
);
exit
(1);
}
if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){
Createsocketfailed."
bzero(&
server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
memcpy(&
server.sin_addr,he->
h_addr,sizeof(structin_addr));
if(connect(fd,(structsockaddr*)&
server,sizeof(structsockaddr))==-1)
connectfailed."
structsockaddr_inlocaladdr;
socklen_tlen=sizeof(localaddr);
getsockname(fd,(structsockaddr*)&
localaddr,&
len);
printf("
LocalipandLocalportis:
%s:
%d\n"
inet_ntoa(localaddr.sin_addr),localaddr.sin_port);
structsockaddr_inpeeraddr;
socklen_tlenp=sizeof(peeraddr);
getpeername(fd,(structsockaddr*)&
peeraddr,&
lenp);
PeeripandPeerportis:
inet_ntoa(peeraddr.sin_addr),peeraddr.sin_port);
close(fd);
}
服务器端程序如下:
sys/types.h>
arpa/inet.h>
#defineBACKLOG1
voidprocess_cli(intconnectfd,structsockaddr_inclient);
main(void)
intlistenfd,connectfd;
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));
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)
accepterror."
close(connectfd);
close(listenfd);
实验二服务器与单客户的连接处理
#defineMAXDATASIZE1000
intmain(intargc,char*argv[])
intfd,numbytes;
structhostent*he;
inti=1;
if(argc!
=2)
%s<
\n"
argv[0]);
if((he=gethostbyname(argv[1]))==NULL){
gethostbynameerror."
if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){
Createsocketfailed"
exit
(1);
server.sin_family=AF_INET;
server.sin_addr=*((structin_addr*)he->
h_addr);
if(connect(fd,(structsockaddr*)&
server,sizeof(structsockaddr))==-1)
if((numbytes=recv(fd,buf,MAXDATASIZE,0))==-1)
recverror."
buf[numbytes]='
\0'
;
ServerMessage:
%s\n"
buf);
while(i){
Inputyourmessage(maxsizeis100):
"
scanf("
%s"
buf);
if(strlen(buf)<
1)i=0;
if((numbytes=send(fd,buf,strlen(buf),0))==-1)
Senderror."
readerror.\n"
}
Theconverseofyourmessageis:
\n"
);
#defineBACKLOG2
#defineMAXCHARSIZE1000
voidprocess_client(intconnectfd,structsockaddr_inclient);
intmain(void)
intlistenfd,connectfd;
structsockaddr_inserver,client;
pid_tpid;
if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1)
server.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(listenfd,(structsockaddr*)&
if(listen(listenfd,BACKLOG)==-1)
sin_size=sizeof(structsockaddr_in);
while
(1){
if((connectfd=accept(listenfd,(structsockaddr*)&
sin_size))==-1){
Accepterror.