Socket接口网络编程实验
一、实验目的
1、熟悉socket编程接口,初步掌握用socket编程接口开发面向连接的网络应用程序的方法,并且能较好的理解、掌握TCP/IP协议,熟悉VC++编程方法及编程环境;
2、初步掌握用socket编程接口开发无连接的网络应用程序的方法;
3、掌握网络应用程序的一般流程,熟悉网络程序的设计思路,步骤。
二、实验类型
设计类实验
三、实验课时
6学时
四、准备知识
1、TCP/IP协议
2、Windows Socket编程知识
3、VC++ 编程语言
五、实验步骤
1、阅读Winsock程序,学习用到的函数和通信过程
(1)面向连接的网络应用程序
阅读Winsock程序,掌握socket网络通信编程的过程,重点掌握使用socket编程接口进行面向连接的网络应用程序开发方法;
(2)无连接的网络应用程序
阅读Winsock程序,掌握socket网络通信编程的过程,重点掌握使用socket编程接口进行无连接的网络应用程序开发方法;
2、编写1个客户机端程序和1个服务器端程序。要求客户机端程序能发送请求给服务器端程序,服务器端程序收到后能发送信息给客户机端程序。
六、实验程序
客户机端程序:
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wV ersionRequested,&wsaData);
if (err!=0)
{
return;
}
if (LOBYTE(wsaData.wV ersion)!=1 || HIBYTE(wsaData.wV ersion)!=1) {
WSACleanup();
return;
}
//创建套接字
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
//把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
//向服务器发送请求
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//接受数据
char recBuf[100];
recv(sockClient,recBuf,100,0);
printf("%s\n",recBuf);
//发送数据
send(sockClient,"this is 李珊珊",strlen("this is 李珊珊")+1,0);
//关闭套接字
closesocket(sockClient);
WSACleanup();
}
服务器端程序:
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wV ersionRequested,&wsaData);
if (err!=0)
{
return;
}
if (LOBYTE(wsaData.wV ersion)!=1|| HIBYTE(wsaData.wV ersion)!=1) {
WSACleanup();
return;
}
//创建监听的套接字
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
//绑定套接字
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字设置为监听模式,准备接受用户请求
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
printf("%s\n","welcome,the serve is started...");
while (1)
{
//等待用户请求到来
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
//发送数据
send(sockConn,sendBuf,100,0);
char revBuf[100];
//接收数据
recv(sockConn,revBuf,100,0);
//打印接受数据
printf("%s\n",revBuf);
//关闭套接字
closesocket(sockConn);
}
}