网络通信之——socket套接字

什么是Socket

socket(简称 套接字)是一个网络通信的端点,它能实现不同主机间的进程通信,我们网络上各种各样大多数都是基于Socket来完成的通讯。

网络中进程之间如何通讯呢?

首要解决的问题是如何确定你要和对方电脑上哪个进程进行通讯,这主要是
利用协议,IP地址,端口标识网络的进程,然后通过这些标识进行通讯。

socket——UDP网络通讯

使用socket创建UDP通讯的过程很简单,如下图:
socket——UDP网络通讯示意图
根据上图我们可以总结创建服务端和客户端的步骤,使用代码分别实现服务端和客户端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
服务端:
1.创建套接字对象
2.绑定ip地址和端口号
3.接受消息
4.返回消息
5.关闭套接字

import socket
# 创建套接字
udp_s = socket.socked(socket.AF_INET,socket.SOCK_DGRAM)
# 绑定ip地址
udp_s.bind(('',8080))
# 接受消息
data,addr = udp_s.recvfrom(1024)
print(data)

# 关闭套接字
udp_s.close()

1
2
3
4
5
6
7
8
9
10
11
12
客户端:
1.创建套接字对象
2.发送消息
3.关闭套接字对象

import socekd
# 创建套接字对象
udp_c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 发送消息
udp_c.sendto('hello'.encode('utf-8'),('192.168.1.15',8080))
# 关闭套接字
udp_c.close()

Socket–TCP网络通讯

TCP通讯过程如下图:
socket——TCP网络通信示意图
从图上可以看出,创建服务端通信需要经过:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1.创建套接字对象
2.绑定ip地址和端口号
3.监听
4.接受消息
5.返回消息
6.关闭套接字

import socket
tcp_s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_s.bind(('',8080))
tcp_s.listen()
s,addr = tcp_s.accept()
data = s.recv(1024)
print(data.decode('utf-8'))
s.send('hello'.encode('utf-8))
s.close()
tcp_s.close()
```
创建客户端通信需要经过:
```
1.创建套接字对象
2.创建连接
3.发送消息
4.关闭套接字对象

import socket
tcp_c = socket.socket(socket.AF_INET,socket.SOCK_STRAM)
tcp_c.connect(('192.168.1.15',8080))
tcp_c.send('hello'.encode('utf-8'))
tcp_c.close()