tcpip socket
时间: 2024-08-15 17:05:34 浏览: 46
TCP/IP协议栈是一种分层架构模型,用于网络通信的基础,其中`socket`是TCP/IP模型中最核心的概念之一,它提供了一种将应用层程序与网络底层传输层进行交互的机制。
### socket的基本概念:
1. **理解socket**:
- Socket可以视为应用程序之间通过网络进行通信的一个端点。它可以看作是一个套接字,类似于电话线路两端的插口,允许两台计算机之间的进程相互通信。
2. **socket的工作原理**:
- 客户端创建一个socket连接到服务器端的socket上,这通常涉及两个阶段:初始化、建立连接以及数据交换。客户端首先创建socket并绑定到某个本地端口号,然后尝试连接到服务器端的端口号。如果成功,则数据交换开始;关闭socket前需要断开连接。
3. **socket的分类**:
- 根据地址族(AF_XXX)的不同,socket可以分为IPv4和IPv6。常见的有Unix域socket (AF_UNIX) 和 Internet socket (AF_INET 或 AF_INET6)。
- 按照协议族(SOCK_XXX),socket分为流式Socket (SOCK_STREAM) 和数据报Socket (SOCK_DGRAM) 等。
4. **编程实现**:
- 使用系统调用如 `socket()`, `bind()`, `listen()`, `accept()` 和 `send()/recv()` 来创建、配置、监听、接受连接和发送/接收数据等操作。
5. **多线程支持**:
- TCP socket 支持多线程并发处理,每个连接都能独立运行,使得在同一时间可以处理多个客户端请求。
### 实现示例(Python语言):
```python
import socket
# 创建一个socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口
host = '127.0.0.1'
port = 12345
server_socket.bind((host, port))
# 开始监听
server_socket.listen(5)
print('Server is listening...')
while True:
# 接受新连接
client_socket, address = server_socket.accept()
print(f'Connected by {address}')
while True:
# 接收数据
data = client_socket.recv(1024)
if not data:
break
print(f'Received: {data.decode()}')
# 发送响应
message = input("Send message: ")
client_socket.sendall(message.encode())
# 关闭连接
client_socket.close()
# 关闭服务端socket
server_socket.close()
```
###
阅读全文