实验三WINSOCK套接字编程实验报告Word文档下载推荐.doc
- 文档编号:13167300
- 上传时间:2022-10-07
- 格式:DOC
- 页数:6
- 大小:79.50KB
实验三WINSOCK套接字编程实验报告Word文档下载推荐.doc
《实验三WINSOCK套接字编程实验报告Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《实验三WINSOCK套接字编程实验报告Word文档下载推荐.doc(6页珍藏版)》请在冰豆网上搜索。
并回答问题(4)-(5)
5.实验结果分析
(1)为什么在服务器和客户端要包含winsock2.h文件?
答:
windowssocket的头文件,不包含该头文件,关于socket编程的结构和函数等都不能被调用。
(2)为什么在服务器和客户端程序中要加入#pragmacomment(lib,"
ws2_32.lib"
)语句,如果不加会出现什么问题?
答:
#pragma
comment(lib,"
Ws2_32.lib"
)表示链接Ws2_32.lib这个库。
和在工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的程序别人在使用你的代码的时候就不用再设置工程settings了。
如果没有这个
(3)为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用,程序会有什么问题?
使用Socket的程序在使用Socket之前必须调用WSAStartup函数。
该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;
操作系统利用第二个参数返回请求的Socket的版本信息。
当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。
以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。
该函数执行成功后返回0。
如果不用,应用程序将无法调用socket函数。
(4)修改后的程序完成实现了什么功能,附上修改后的源代码。
(修改或填加的代码用波浪线标注,并填加注释),并附上实验截图
实现功能:
在有双方IP的情况下可以实现窗体界面的交互式聊天功能,可以中英文符号数字随意输入。
截图:
客户端:
服务器:
客户端代码:
#include"
stdafx.h"
#include<
stdio.h>
stdlib.h>
errno.h>
string.h>
sys/types.h>
winsock2.h>
conio.h>
windows.h>
#pragmacomment(lib,"
)
#definePORT3490/*客户机连接远程主机的端口*/
#defineMAXDATASIZE100/*每次可以接收的最大字节*/
int_tmain(intargc,_TCHAR*argv[])
{
WORDwVersionRequested;
WSADATAwsaData;
interr=0,rval=0;
SOCKETfd;
structsockaddr_inservaddr;
structhostent*hp;
charbuf[1024]="
"
;
wVersionRequested=MAKEWORD(2,2);
err=WSAStartup(wVersionRequested,&
wsaData);
if(err!
=0)
return-1;
if((fd=socket(AF_INET,SOCK_STREAM,0))<
0)
{
printf("
Cannotcreatesocket!
);
exit
(2);
}
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(PORT);
hp=gethostbyname("
113.55.38.221"
//输入服务器ip地址//根据服务器的网络计算//机名称得到其IP地址等信息
memcpy((char*)&
servaddr.sin_addr,(char*)hp->
h_addr,hp->
h_length);
memset(servaddr.sin_zero,0,sizeof(servaddr.sin_zero));
//和服务器创建连接
rval=connect(fd,(sockaddr*)&
servaddr,sizeof(servaddr));
if(rval<
0)
{//创建连接失败
Cannotcreateconnect!
exit(3);
else
while
(1)
{
{memset(buf,0,1024);
客户端--〉:
scanf("
%s"
&
buf);
//向服务器发送信息
rval=send(fd,buf,strlen(buf)+1,0);
if(rval<
printf("
Writeerror!
if((rval=recv(fd,buf,sizeof(buf),0)<
0))
perror("
readingstreammessage"
if(rval==0)
printf("
服务器--〉:
%s\n"
buf);
}
closesocket(fd);
exit(5);
}
服务器代码:
#include<
#defineMYPORT3490/*定义用户连接端口*/
#defineBACKLOG10/*多少等待连接控制*/
#defineSERVER_IP_ADDR"
//输入本机ip地址/*服务器的IP地址*/
SOCKETsock,msgsock;
intlength=0;
structsockaddr_inserver;
structsockaddrtcpaddr;
intrval=0,len=0,err=0;
/*指定socket版本,否则创建socket失败,即使创建socket返回值不为-1,但是bind时会失败*/
/*建立套接字*/
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock<
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));
//将服务器地址与socket绑定在一起
rval=bind(sock,(structsockaddr*)&
server,sizeof(server));
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
{
w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 WINSOCK 套接 编程 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)