一、 实验要求
(1)分别编写基于TCP和UDP的Windows和Linux程序客户端和服务器端;
(2)实现TCP客户端和服务器端之间的基本的数据收发;
(3)实现UDP客户端和服务器端之间的基本的数据收发;
二、实验目的
(1)掌握基于C语言的Socket编程相关函数和数据类型;
(2)掌握WIN32和Linux操作系统下的程序的基本编程方法,以及TCP、UDP编程的基本方法;
(3)熟练掌握UDP、TCP 客户端/服务器端模式的通信原理,及编程命令;
三、 实验环境
Windows 2007,DEV C++。
四、 实验内容
一个简单的客户机/服务器程序的实现。基本原理:
服务器端:
(1)调用socket函数创建套接字;
(2)调用bind函数绑定socket和端口号;
(3)调用listen函数监听连接请求;
(4)调用accept函数接收来自客户端的连接请求;
(5)调用send()、recv()函数和read()、write()函数进行数据的传输;
(6)调用close()函数关闭套接字;
客户端:
(1)调用socket()函数创建套接字;
(2)调用connect()函数连接指定服务器的端口;
(3)调用send()、recv()函数和read()、write()函数进行数据的传输;
(4)调用close()函数关闭套接字;
五、 实验原代码
(1)服务端代码
1. #include<stdio.h>
2. #include<stdlib.h>
3. #include<string.h>
4. #include<winsock2.h>
5.
6. #define BUF_SIZE 1024
7. void ErrorHandling(char *message);
8.
9. int main(int argc,char *argv[])
10. {
11. WSADATA wsaData;//定义数据类型
12. SOCKET hServSock,hClntSock;
13. char message[BUF_SIZE];//消息数组
14. int strLen,i;
15. SOCKADDR_IN servAdr,clntAdr;//指明地址信息
16. int clntAdrSize;
17. //初始化个变量,以及定义结构体
18. if(argc!=2)//输入两个值
19. {
20. printf("Usage : %s <port>\n", argv[0]);
21. exit(1);
22. }
23.
24. if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
25. /*windows环境下的winsock初始