socket programming实验
时间: 2023-05-02 20:04:40 浏览: 54
socket编程实验是指通过使用socket库,在计算机网络中实现基于TCP或UDP协议的网络通信的实验。该实验通常涉及到创建套接字、链接远程主机、发送和接收数据等操作,旨在通过实践掌握socket编程的基本原理和技巧。
相关问题
Socket 编程实验
Socket编程是一种网络编程方式,可以实现不同计算机之间的通信。下面是一个简单的Socket编程实验:
1. 服务器端代码:
```python
import socket
# 创建一个socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 绑定端口号
server_socket.bind((host, port))
# 等待客户端连接
server_socket.listen(5)
while True:
# 建立客户端连接
client_socket, addr = server_socket.accept()
print("连接地址: %s" % str(addr))
# 向客户端发送消息
message = '欢迎访问菜鸟教程!' + "\r\n"
client_socket.send(message.encode('utf-8'))
# 关闭连接
client_socket.close()
```
2. 客户端代码:
```python
import socket
# 创建一个socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 连接服务,指定主机和端口
client_socket.connect((host, port))
# 接收小于1024字节的数据
message = client_socket.recv(1024)
print(message.decode('utf-8'))
# 关闭连接
client_socket.close()
```
这个实验中,我们创建了一个简单的Socket服务器和客户端,服务器监听端口号9999,客户端连接到服务器并接收服务器发送的消息。这个实验只是一个简单的例子,Socket编程可以实现更复杂的网络通信。
socket实验报告
实验目的:
通过使用socket编程实现客户端与服务器之间的通信,了解socket编程的基本原理和实现方法。
实验环境:
操作系统:Windows 10
开发工具:Visual Studio 2019
实验步骤:
1.创建服务器端
首先,我们需要创建一个服务器端程序,在Visual Studio中,我们可以选择创建一个新的控制台应用程序,命名为Server。
然后,我们需要引入Winsock库,包含头文件winsock2.h,代码如下:
```
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
```
接下来,我们需要初始化Winsock库,代码如下:
```
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
```
然后,我们需要创建一个套接字,代码如下:
```
SOCKET ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ListenSocket == INVALID_SOCKET) {
printf("socket failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
```
接着,我们需要设置服务器端的地址和端口,代码如下:
```
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(27015);
```
接下来,我们需要将套接字绑定到服务器端地址和端口上,代码如下:
```
if (bind(ListenSocket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) {
printf("bind failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
```
然后,我们需要监听客户端的连接请求,代码如下:
```
if (listen(ListenSocket, SOMAXCONN) == SOCKET_ERROR) {
printf("listen failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
```
最后,我们需要接受客户端的连接请求,并且和客户端进行通信,代码如下:
```
SOCKET ClientSocket = INVALID_SOCKET;
ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
char recvbuf[512];
int iResult;
do {
iResult = recv(ClientSocket, recvbuf, sizeof(recvbuf), 0);
if (iResult > 0) {
printf("Bytes received: %d\n", iResult);
printf("Message received: %s\n", recvbuf);
send(ClientSocket, recvbuf, iResult, 0);
}
else if (iResult == 0) {
printf("Connection closing...\n");
}
else {
printf("recv failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
} while (iResult > 0);
```
2.创建客户端
接下来,我们需要创建一个客户端程序,在Visual Studio中,我们可以选择创建一个新的控制台应用程序,命名为Client。
同样,我们需要引入Winsock库,包含头文件winsock2.h,代码如下:
```
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
```
接着,我们需要初始化Winsock库,代码如下:
```
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
```
然后,我们需要创建一个套接字,代码如下:
```
SOCKET ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
printf("socket failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
```
接下来,我们需要设置服务器端的地址和端口,代码如下:
```
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = htons(27015);
```
然后,我们需要连接服务器端,代码如下:
```
if (connect(ConnectSocket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) {
printf("connect failed with error: %ld\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
```
最后,我们需要向服务器端发送消息,并且接收服务器端的回复,代码如下:
```
char sendbuf[512] = "Hello, server!";
int iResult = send(ConnectSocket, sendbuf, sizeof(sendbuf), 0);
if (iResult == SOCKET_ERROR) {
printf("send failed with error: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
printf("Bytes sent: %d\n", iResult);
char recvbuf[512];
iResult = recv(ConnectSocket, recvbuf, sizeof(recvbuf), 0);
if (iResult > 0) {
printf("Bytes received: %d\n", iResult);
printf("Message received: %s\n", recvbuf);
}
else if (iResult == 0) {
printf("Connection closing...\n");
}
else {
printf("recv failed with error: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
```
实验结果:
在Server程序中,我们可以看到服务器端已经成功地监听客户端的连接请求,并且和客户端进行了通信。
在Client程序中,我们可以看到客户端已经成功地连接到服务器端,并且向服务器端发送了消息,并且接收到了服务器端的回复。
实验总结:
通过本次实验,我们学习了socket编程的基本原理和实现方法,掌握了如何使用socket编程实现客户端与服务器之间的通信。同时,我们也了解了Winsock库的使用方法,包括如何引入库文件,如何初始化库,如何创建套接字,如何设置地址和端口,如何监听连接请求,如何接受连接请求,如何发送和接收消息等等。