写一份linux tcp编程实验指导书
时间: 2023-08-10 21:43:53 浏览: 50
好的,下面是一份简单的Linux TCP编程实验指导书。
实验名称:Linux TCP编程实验
实验目的:
1. 熟悉Linux TCP编程基本流程和函数;
2. 能够编写简单的TCP客户端和服务器程序;
3. 掌握TCP连接的建立、数据传输和断开过程。
实验环境:
1. Linux操作系统;
2. GCC编译器。
实验内容:
1. 编写一个简单的TCP服务器程序,实现对客户端的连接和数据传输;
2. 编写一个TCP客户端程序,实现向TCP服务器发送数据并接收服务器返回的数据。
实验步骤:
1. 编写TCP服务器程序
(1)创建一个TCP服务器文件server.c:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
int main()
{
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
char buffer[1024] = {0};
// 创建socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
{
perror("socket failed");
exit(EXIT_FAILURE);
}
// 绑定地址和端口
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
memset(server_addr.sin_zero, 0, sizeof(server_addr.sin_zero));
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
{
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听连接
if (listen(server_fd, 5) < 0)
{
perror("listen failed");
exit(EXIT_FAILURE);
}
printf("Waiting for client connection...\n");
// 接受客户端连接
if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_len)) < 0)
{
perror("accept failed");
exit(EXIT_FAILURE);
}
printf("Client connected from %s:%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
// 接收客户端数据
int num_bytes;
while ((num_bytes = read(client_fd, buffer, sizeof(buffer))) > 0)
{
printf("Received %d bytes from client: %s\n", num_bytes, buffer);
// 处理客户端数据
// ...
// 发送响应数据
if (write(client_fd, "Hello from server!", strlen("Hello from server!")) < 0)
{
perror("write failed");
exit(EXIT_FAILURE);
}
}
// 断开连接
close(client_fd);
close(server_fd);
printf("Connection closed.\n");
return 0;
}
```
(2)编译server.c文件:
```
gcc -o server server.c
```
(3)执行server程序,等待客户端连接。
2. 编写TCP客户端程序
(1)创建一个TCP客户端文件client.c:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERVER_IP "127.0.0.1"
#define PORT 8888
int main()
{
int client_fd;
struct sockaddr_in server_addr;
char buffer[1024] = {0};
// 创建socket
if ((client_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
{
perror("socket failed");
exit(EXIT_FAILURE);
}
// 连接服务器
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
server_addr.sin_port = htons(PORT);
memset(server_addr.sin_zero, 0, sizeof(server_addr.sin_zero));
if (connect(client_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
{
perror("connect failed");
exit(EXIT_FAILURE);
}
printf("Connected to server %s:%d\n", SERVER_IP, PORT);
// 发送数据
if (write(client_fd, "Hello from client!", strlen("Hello from client!")) < 0)
{
perror("write failed");
exit(EXIT_FAILURE);
}
printf("Sent data to server.\n");
// 接收响应数据
int num_bytes;
if ((num_bytes = read(client_fd, buffer, sizeof(buffer))) > 0)
{
printf("Received %d bytes from server: %s\n", num_bytes, buffer);
}
// 断开连接
close(client_fd);
printf("Connection closed.\n");
return 0;
}
```
(2)编译client.c文件:
```
gcc -o client client.c
```
(3)执行client程序,向服务器发送数据并接收服务器返回的数据。
实验总结:
通过本次实验,我们掌握了Linux TCP编程的基本流程和函数,并且能够编写简单的TCP客户端和服务器程序。同时,我们也深入了解了TCP连接的建立、数据传输和断开过程。