网络编程实验

  • 格式:docx
  • 大小:183.11 KB
  • 文档页数:11

计算机实验报告题目:TCPI编程
西安电子科技大学
微电子学院
14112xxx
1.客户端和服务器端程序的设计流程简述;
客户端:
1)建立套接字socket
2)建立connect连接请求
3)用scanf()获得所要发送的字符串数据
4)用send()将数据发送到服务器上
5)利用recv()获得服务器发来的信息
6)Close,结束本次连接
服务器:
1)建立空套接字socket
2)利用bind()绑定给套接字赋值
3)利用listen()将套接字设置为被动状态,以便接收客户
端的服务请求。

4)利用accept()使服务器能将客户端的连接请求提取出来
5)使用secv()等待客户端发来的数据
6)使用send()回复相应信息给客户端
7)Close,结束本次连接,服务器回到accept状态
2.VC工具的使用,包括工程的创建和网络编程环境的建立,即如何加载ws2_32.lib库;
运行vc,选择---------->新建工程------------>Win32 console application ------->工程名------> 一个空工程,然后选择设置中的link,将ws2_32.lib添加进去,并添加winsock2.h头文件,然后就可以开始编程了
3. 客户端程序设计与服务器程序设计,包括流程图和代码;
客户端:
1)流程图
程序代码:
#include "stdafx.h"
#include"winsock2.h"
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
char recvBuf[50];
char sendBuf[50];
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("168.168.2.24");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
scanf(%s,sendBuf);
send(sockClient,sendBuf,sizeof(sendBuf),0);
recv(sockClient,recvBuf,50,0);
printf("%s\n",recvBuf);
closesocket(sockClient);
WSACleanup();
}
2)服务器流程图:
服务器程序:
#include "stdafx.h"
#include "stdio.h"
#include "winsock2.h"
int main(int argc, char* argv[])
{
int nRetCode = 0;
// TODO: 在此处为应用程序的行为编写代码。

WORD wVersionRequested;
WSADATA wsaData;
int err;
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
SOCKET sockConn;
char sendBuf[100];
char recvBuf[100];
wVersionRequested = MAKEWORD( 1,1);
err =WSAStartup(wVersionRequested,&wsaData);
if( err != 0){ return 1;}
if( LOBYTE( wsaData.wVersion)!= 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
WSACleanup();
return 1;
}
//create a socket:
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5);
printf("it has enter state of listen;\n");
while(1)
{
printf("it will be start to accept");
sockConn =
accept(sockSrv,(SOCKADDR*)&addrClient,&len);
sprintf(sendBuf, "Welcome %s to Xidian Univ",
inet_ntoa(addrClient.sin_addr));
printf("%s", sendBuf);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
recv(sockConn,recvBuf,100,0);
printf( "%s\n ",recvBuf);
closesocket(sockConn);
}
return nRetCode;
}
经检验,此程序是可以使用的。

并在后面的使用中得到验证
其正确性。

4. 对程序进行编译连接过程的错误解决;
未添加库ws2_32.lib,造成编译出错
5.针对不同通信模式的测试结果与分析,可以考虑包括:
1)本机调试方式;
只要把ip地址设置为168.168.5.24即可
2)客户机与服务器电脑的调试方式等不同调试环境下的程序运行结果。

运行结果相同
6. 包括对第5部分调试过程中IP地址和端口设置过程的体会。

最后可以给出对本课程的建议和意见。

真正的涉及编程的时候,不一定要求要把所有代码都弄明白,许多时候只要把它当作一个个工具,直接使用即可,这样,即使水平一般的人也能设计出好的程序,也应该自我提高一下,争取能够完全弄明白这些。

另一方面,希望老师能多举一些实例,让自己能更学以致用。

7、实验结果
附图如下。