在TCP编程中,发送数据的基本步骤如下:
创建套接字
在服务器端,使用`socket()`函数创建一个TCP套接字。例如,在C++中,`int server_socket = socket(AF_INET, SOCK_STREAM, 0);`。
在客户端,同样使用`socket()`函数创建一个TCP套接字。例如,在Python中,`s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)`。
绑定地址和端口
在服务器端,使用`bind()`函数将套接字绑定到本地的IP地址和端口号。例如,在C++中,`server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); server_socket.bind(server_addr);`。
在客户端,可以使用`connect()`函数连接到服务器的IP地址和端口号。例如,在Python中,`s.connect(('localhost', port))`。
监听连接请求 (仅服务器端需要):使用`listen()`函数监听客户端的连接请求。例如,在C++中,`server_socket.listen(5);`。
在Python中,`server_socket.listen(1)`。
接受连接
(仅服务器端需要):
使用`accept()`函数接受客户端的连接请求。例如,在C++中,`Socket client_socket = server_socket.accept();`。
在Python中,`client_socket, client_address = server_socket.accept()`。
数据交互 在服务器端,使用`recv()`函数接收客户端发送的数据。例如,在C++中,`char buffer; int bytes_received = client_socket.recv(buffer, sizeof(buffer));`。 在Python中,使用`in.readline()`或`client_socket.recv(1024)`。 使用`send()`函数发送数据回客户端。例如,在C++中,`client_socket.send(buffer, bytes_received);`。 在Python中,使用`out.write(message + ' ')`或`client_socket.send(message.encode())`。 在数据交互完成后,使用`close()`函数关闭套接字。例如,在C++中,`client_socket.close();`。 在Python中,`client_socket.close()`。 服务器端代码: ```python import socket 创建TCP/IP套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 绑定地址和端口 server_socket.bind(('localhost', 12345)) 监听客户端连接 server_socket.listen(1) print("服务器已启动,等待客户端连接...") 接受连接 client_socket, client_address = server_socket.accept() print("客户端已连接:", client_address) 数据交互 while True: message = client_socket.recv(1024) if message: print(f"收到消息: {message.decode()}") response = "Hello from server!" client_socket.send(response.encode()) else: break 关闭连接 client_socket.close() server_socket.close() ``` 客户端代码关闭连接
```python
import socket
创建TCP/IP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
连接到服务器
client_socket.connect(('localhost', 12345))
发送数据
message = "Hello from client!"
client_socket.send(message.encode())
接收数据
response = client_socket.recv(1024)
print(f"收到服务器消息: {response.decode()}")
关闭连接
client_socket.close()
```
通过以上步骤和示例代码,可以实现TCP协议的基本数据发送和接收功能。