好文档 - 专业文书写作范文服务资料分享网站

Windows网络编程(一)——WinSock编程

天下 分享 时间: 加入收藏 我要投稿 点赞

WinSock编程实验报告

班 级:10网工三班 学生姓名:谢昊天 学号:1215134046

实验目的和要求: 实验目的

1、了解WinsockAPI

2、深刻领会Winsock编程原理

3、学会使用Winsock创建简单的TCP服务器以及客户机 实验要求

1. 整个通信过程参照TCP/IP通信方式; 2. 实现整个TCP/IP通信的基本模型;

3. 完成基本的界面设计和事件响应;

4. 服务器可以同时和多个用户对话,可以同时恢复多个用户; 5. 保证信息传输的畅通;

6. 服务器可以依次和多个用户对话。

实验内容与分析设计:

编写一个基于某种I/O方法的TCP服务器和TCP客户机:能够实现模拟C/S模型的通信方式,服务器端负责信息的接收,并能够返回给客户端相应的消息;客户机负责向服务器发送信息。

注:可以模拟教材95页面向连接的TCP Socket应用程序编程实例。

实验步骤与调试过程:

1.打开Visual c++ 6.0编程环境;

2.点击文件->新建、选择建立新的工程;选择Win32 Console Application选项建立工程名为“服务器”的一个空工程;

3. 继续点击文件->新建、选择建立新的文件;选择C++ Source File选项建立在“服务器”工程下的名为“服务器”的文件; 4.编辑源程序->调试;

(1)定义头文件和常量,声明两个SOCKET对象,初始化SOCKET环境;(2)创建用于监听的SOCKET环境;(3)设置服务器SOCKET的地址,并绑定socket server 到本地地址,在socket server 上进行监听,而后调用accept()函数等待来自客户端的连接请求;(4)在服务器与客户机之间发送和接收数据;(5)当服务器程序接收到来自客户端的“quit”字符串后,将退出循环并释放占用的资源;

5.在组建选项中点击执行【服务器.exe】(或者Ctrl+F5)执行程序; 6.运行服务器查看服务器是否处于监听状态。

7.再次打开Visual c++ 6.0编程环境;

8.点击文件->新建、选择建立新的工程;选择Win32 Console Application选项建立工程名为“客户端”的一个空工程;

9. 继续点击文件->新建、选择建立新的文件;选择C++ Source File选项建立在“客户端”工程下的名为“客户端”的文件; 10.编辑源程序->调试;(1)在主程序中定义头文件和常量并声明变量,初始化socket 环境并创建用于通信的socket;(2)设置socket地址并连接到服务器;(3)在服务器与客户机之间发送和接收数据;(4)当程序退出while循环时将释放占用的资源; 11.在组建选项中点击执行【服务器.exe】(或者Ctrl+F5)执行程序;

12. 运行服务器程序后再次运行客户端程序在客户端的命令窗口中执行netstat-nao.查看客户端程序的状态。

实验结果:

1.实现了在服务器与客户端之间发送和接受数据。 2.运行服务器后,服务器处于监听状态

3. 实现了接受来自客户端的请求。

4.实现模拟C/S模型的通信方式,服务器端负责信息的接收,并能够返回给客户端相应的消息;客户机负责向服务器发送信息。

疑难小结:

通过本次试验,了解了socketb编程的一些基础知识,学习到了用socket 编写 服务器应用程序。学习到了设置服务器socket 地址,用socket 编写客户端应用程序,以及如何接受来自客户端的请求。从而使我对TCP Socket服务器应用程序有了进一步的了解,通过动手实现其TCP Socket服务器在TCP端口9990上进行监听,实现CP Socket客户端自动连接到指定服务器的TCP端口9990,然后提示用户输入向服务器发送的字符串,更加深刻的理解了TCP Socket服务器与客户端的特点。同时,在实验过程中,回顾书本上的理论知识,巩固了我的知识。

主要算法和程序清单: 服务器:

#include #include

#pragma comment(lib,\ #define BUF_SIZE 64

int main(int argc, TCHAR* argv[]) {

WSADATA wsd; SOCKET sServer; SOCKET sClient;

int retVal;

char buf[BUF_SIZE];

if(WSAStartup(MAKEWORD(2,2),&wsd) !=0)

{

printf(\ return 1; }

sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(INVALID_SOCKET ==sServer) {

printf(\WSACleanup(); return -1;

}

SOCKADDR_IN addrServ;

addrServ.sin_family = AF_INET; addrServ.sin_port = htons(9990);

addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

retVal = bind(sServer,(const struct sockaddr*)&addrServ,sizeof(SOCKADDR_IN)); if(SOCKET_ERROR == retVal) { printf(\

closesocket(sServer); WSACleanup();

return -1; }

retVal = listen(sServer,1); if(SOCKET_ERROR == retVal) {

printf(\closesocket(sServer); WSACleanup(); return -1;

}

printf(\sockaddr_in addrClient;

int addrClientlen = sizeof(addrClient);

sClient = accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen); if(INVALID_SOCKET == sClient) {

printf(\closesocket(sServer); WSACleanup(); return -1;

}

while(true) {

ZeroMemory(buf,BUF_SIZE); retVal = recv(sClient,buf,BUFSIZ,0); if(SOCKET_ERROR == retVal) { printf(\ }

SYSTEMTIME st; GetLocalTime(&st); char sDateTime[30];

closesocket(sServer); closesocket(sClient); WSACleanup(); return -1;

sprintf(sDateTime,\ear,st.wMonth,st.wHour,st.wMinute,st.wSecond);

printf(\From

[%s:%d] :%s\\n\ if(strcmp(buf,\

{

retVal = send(sClient,\ break; } else { }

char msg[BUF_SIZE];

sprintf(msg,\retVal = send(sClient, msg, strlen(msg),0); if(SOCKET_ERROR == retVal) { }

printf(\closesocket(sServer); closesocket(sClient); WSACleanup (); return -1;

Client

}

closesocket(sServer); closesocket(sClient); WSACleanup(); system(\return 0; }

客户端:

#include #include #include

#pragma comment(lib,\ #define BUF_SIZE 64

int main(int argc, TCHAR* argv[]) {

WSADATA wsd; SOCKET sHost;

SOCKADDR_IN servAddr; char buf[BUF_SIZE];

int retVal;

if (WSAStartup(MAKEWORD(2,2),&wsd) != 0) { }

sHost = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(INVALID_SOCKET == sHost) { printf(\ WSACleanup();

return -1;

servAddr.sin_family = AF_INET;

servAddr.sin_addr.S_un.S_addr = inet_addr(\servAddr.sin_port = htons(9990);

int sServerAddlen = sizeof(servAddr); printf (\return 1;

}

retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr)); if(SOCKET_ERROR == retVal) { } {

printf(\std::string str;

std::getline(std::cin, str); printf(\closesocket(sHost); WSACleanup(); return -1;

while(true)

}

ZeroMemory(buf,BUF_SIZE); strcpy(buf,str.c_str());

retVal = send(sHost,buf,strlen(buf),0); if(SOCKET_ERROR == retVal) { }

retVal = recv(sHost,buf,sizeof(buf)+1,0); printf(\if(strcmp(buf,\{

printf(\break;

printf(\closesocket(sHost); WSACleanup(); return -1;

} }

closesocket(sHost); WSACleanup(); system(\return 0;

Windows网络编程(一)——WinSock编程

WinSock编程实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:实验目的1、了解WinsockAPI2、深刻领会Winsock编程原理3、学会使用Winsock创建简单的TCP服务器以及客户机实验要求1.整个通信过程
推荐度:
点击下载文档文档为doc格式
2wp3u00hej47hq710ei0
领取福利

微信扫码领取福利

微信扫码分享