计算机网络原理实验三Word格式文档下载.doc

上传人:b****2 文档编号:13319907 上传时间:2022-10-09 格式:DOC 页数:6 大小:293KB
下载 相关 举报
计算机网络原理实验三Word格式文档下载.doc_第1页
第1页 / 共6页
计算机网络原理实验三Word格式文档下载.doc_第2页
第2页 / 共6页
计算机网络原理实验三Word格式文档下载.doc_第3页
第3页 / 共6页
计算机网络原理实验三Word格式文档下载.doc_第4页
第4页 / 共6页
计算机网络原理实验三Word格式文档下载.doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

计算机网络原理实验三Word格式文档下载.doc

《计算机网络原理实验三Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《计算机网络原理实验三Word格式文档下载.doc(6页珍藏版)》请在冰豆网上搜索。

计算机网络原理实验三Word格式文档下载.doc

#include<

winsock2.h>

#pragmacomment(lib,"

ws2_32.lib"

#defineMYPORT3490/*定义用户连接端口*/

#defineBACKLOG10/*多少等待连接控制*/

#defineSERVER_IP_ADDR"

113.55.34.41"

/*服务器的IP地址*/

int_tmain(intargc,_TCHAR*argv[])

{

SOCKETsock,msgsock;

#definePORT3490

intlength=0;

structsockaddr_inserver;

structsockaddrtcpaddr;

charbuf[1024]="

"

;

intrval=0,len=0,err=0,i;

//用于循环

WORDwVersionRequested;

WSADATAwsaData;

wVersionRequested=MAKEWORD(2,2);

err=WSAStartup(wVersionRequested,&

wsaData);

if(err!

=0)

return-1;

sock=socket(AF_INET,SOCK_STREAM,0);

if(sock<

0)

{

perror("

openingstreamsocket"

);

exit

(1);

}

server.sin_family=AF_INET;

server.sin_port=htons(MYPORT);

server.sin_addr.s_addr=inet_addr(SERVER_IP_ADDR);

memset(server.sin_zero,0,sizeof(server.sin_zero));

rval=bind(sock,(structsockaddr*)&

server,sizeof(server));

if(rval<

0)

bindingstreamsocket"

length=sizeof(server);

if(getsockname(sock,(structsockaddr*)&

server,&

length)<

gettingsocketname"

printf("

socketport#%d\n"

ntohs(server.sin_port));

listen(sock,5);

len=sizeof(structsockaddr);

do

{msgsock=accept(sock,(structsockaddr*)&

tcpaddr,(int*)&

len);

if(msgsock==-1)

perror("

accept"

else

{

for(i=0;

i<

=1000;

i++)//循环控制

{

memset(buf,0,sizeof(buf));

if((rval=recv(msgsock,buf,sizeof(buf),0)<

0))

perror("

readingstreammessage"

if(rval==0)

printf("

%s\n"

buf);

}

}

closesocket(msgsock);

}while(TRUE);

closesocket(msgsock);

return0;

}

客户端:

#definePORT3490/*客户机连接远程主机的端口*/

#defineMAXDATASIZE100/*每次可以接收的最大字节*/

interr=0,rval=0,i;

SOCKETfd;

structsockaddr_inservaddr;

structhostent*hp;

wVersionRequested=MAKEWORD(2,2);

if((fd=socket(AF_INET,SOCK_STREAM,0))<

printf("

Cannotcreatesocket!

exit

(2);

servaddr.sin_family=AF_INET;

servaddr.sin_port=htons(PORT);

servaddr.sin_addr.S_un.S_addr=inet_addr("

memset(servaddr.sin_zero,0,sizeof(servaddr.sin_zero));

rval=connect(fd,(sockaddr*)&

servaddr,sizeof(servaddr));

{

Cannotcreateconnect!

exit(3);

else

{

for(i=0;

{

memset(buf,0,1024);

scanf("

%s"

&

buf);

rval=send(fd,buf,strlen(buf)+1,0);

if(rval<

printf("

Writeerror!

}

}

closesocket(fd);

exit(5);

b.给出程序调试和运行的截图。

c.回答下列问题:

(1)为什么在服务器和客户端要包含winsock2.h文件?

答:

用Winsock2API,这样有助于对异步、非阻塞Socket编程机制的理解。

为了简单起见,服务器端和客户端的应用程序均是基于MFC的标准对话框,网络通信部分基于Winsock2API实现。

(2)为什么在服务器和客户端程序中要加入#pragmacomment(lib,"

)语句,如果不加会出现什么问题?

用该语句,指示编译当前单元时,linker会优先链接该preproccessor指定的lib文件,这样等于就告诉编译器有这样一个lib文件可以去链接。

如果不加就会出现类似“LNK2019:

无法解析的外部符号__imp__closesocket@4,该符号在函数_wmain中被引用”的错误。

(3)为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用程序会有什么问题?

使用Winsock库函数之前,必须先调用函数WSAStartup,该函数负责初始化动态连接库Ws2_32.dll.若ws2_32.dll尚未初始化,是无法调用WSAGetLastError.WSAStartup是任何使用Winsock的应用程序或者DLL首先必须调用Winsock库函数.一方面它初始化ws2_32.dll,另一方面他用于在应该程序DLL与系统Winsock库版本协商。

所以,如果不用该函数程序将无法按照正常的情况进行。

(4)如果程序在TurboC环境下运行,在服务器和客户程序中还需要上面的内容吗?

不需要。

(5)如果服务器程序中没有memset(server.sin_zero,0,sizeof(server.sin_zero));

语句,程序会出现什么错误,为什么?

此函数是为新申请的内存做初始化工作。

如果去掉该语句在理论上面应该有错误,但是在我的实际操作中却没有错误,这个问题在我将继续深究。

(6)如果先运行客户端程序,程序会有什么现象,为什么会有这一现象?

无法连接。

因为如果先运行客户端的话,没有服务器端等待,那么服务器端艰苦肯定无法给予响应,所以也就无法连接。

(7)如果服务器程序所在计算机没有连接网络,程序会发生什么错误?

我们捕获到什么错误信息?

会出现报错。

(8)上述服务器是串行处理多个客户端的请求,如何该成并发处理的服务器?

用父进程调用accept,然后调用fork,这样,已连接套接口就在父进程与子进程间共享,一般来说,接下来便是子进程读、写已连接套接口并关闭侦听套接口,而父进程则关

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

当前位置:首页 > 考试认证 > IT认证

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

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