logo头像

猪老大要进步!

Socket网络通讯

本文于 579 天之前发表,文中内容可能已经过时。

Socket是一种基础的网络协议,在这种协议的基础上可以做很多事比如聊天室、文件传递等。

Socket通信原理

  1. 服务端new一个实例和socket绑定,然后监听
  2. accept客户端的connect请求之后,read其内容
  3. 根据客户端的内容做出处理,反写(write)给客户端
  4. 客户端读取server的数据
  5. close

socket通讯协议

Python代码

Python代码分为server端和client端,实测通讯成功。C++因为VS的版本会报错(采用了新的接口之类),因此暂缓实现。

  1. server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket # 导入 socket 模块

s = socket.socket() # 创建 socket 对象
# host = socket.gethostname() # 获取本地主机名
host = '0.0.0.0' # 设置外网通讯
port = 12123 # 设置端口
s.bind((host, port)) # 绑定端口
s.listen(5) # 等待客户端连接
print("host:",host,"port:",port,"waiting...")
while True:
c,addr = s.accept() # 建立客户端连接
print('Get connection from', addr)
c.send(bytes('Success connecting from %s:%s'%addr, encoding='UTF-8'))
while True:
data = c.recv(1024)
if not data:
break
print(data)
c.send(data)
c.close() # 关闭连接
  1. client.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket # 导入 socket 模块

s = socket.socket() # 创建 socket 对象
#host = socket.gethostname() # 获取本地主机名
host = '1.117.177.117'
port = 12123 # 设置端口号

s.connect((host, port))
print(s.recv(1024))
while True:
inp = input(">>>")
if not inp:
continue
s.send(bytes(inp,encoding="utf-8"))
print(s.recv(1024))

# s.close()

参考文献

  1. https://cloud.tencent.com/developer/article/1569435
  2. https://www.runoob.com/w3cnote/android-tutorial-socket1.html
  3. https://www.runoob.com/python/python-socket.html
支付宝打赏 微信打赏

赞赏是不耍流氓的鼓励