实验 3 定长数据与变长数据的接收
一、实验目的
1.掌握定长数据的接收方法;
2.掌握变长数据的接收方法;
3.掌握发送变长数据的实现方法。
二、实验内容
1. 使用流式套接字编程设计实现定长数据的接收方法
提示:首先要实现接收定长数据的服务器,然后再实现一个发送数据的客户端,其中客
户端发送的内容是程序运行过程中由用户从键盘输入的任意内容。
服务器端的编程思路:
1)所需要的头文件:
time.h、Winsock2.h、stdio.h
可能需要使用以下三个常量:
MAXLINE 4096 //接收缓冲区长度
LISTENQ 1024 //监听队列长度
SERVER_PORT 1333 //回射服务器端口号
2)初始化 Windows Sockets DLL,并协商版本号:
iResult = WSAStartup(wVersionRequested, &wsaData);
其中,iResult 是一个 int 类型的变量 ,即:int iResult;
wVersionRequested 是一个 WORD 类型的变量;
wsaData 是一个 WSADATA 类型变量;
在调用 WSAStartup()函数之前,应该先使用 MAKEWORD(lowbyte, highbyte)
宏获得 WSA 的版本号:
// 使用 MAKEWORD(lowbyte, highbyte) 宏,在 Windef.h 中声明
wVersionRequested = MAKEWORD(2, 2);
3)创建流式套接字:
ListenSocket = socket(AF_INET, SOCK_STREAM, 0)
其中,ListenSocket 是 SOCKET 类型的变量,即:SOCKET ListenSocket;
4)绑定服务器地址:
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERVER_PORT); /* daytime server */
iResult = bind ( ListenSocket , ( struct sockaddr * ) & servaddr , sizeof
(servaddr));
其中,servaddr 是一个 struct sockaddr_in 类型的变量,是一个地址结构,定义方法:struct
sockaddr_in servaddr;