Python之socket编程

先放个题外话,了解一下OSI七层网络模型,这里放一张网上的图

再大致了解一下socket的基本概念:

       网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。它的工作方式是这样的
了解了大致的工作方式,主要是怎么使用!
用socket编程时,需要做一个客户端和一个服务器端,我们先做个最简单的socket通讯模式
 1 import socket
 2 server = socket.socket()
 3 server.bind(('localhost',9999))
 4 server.listen()
 5 conn,addr = server.accept()
 6 print(conn,addr)
 7 print("开始")
 8 while True:
 9     data = conn.recv(1024)
10     print(data.decode())
11     conn.send(data.upper().encode())
12 server.close()
server端
1 import socket
2 client = socket.socket()
3 client.connect(('localhost',9999))
4 while True:
5     msg = input('>>>').strip()
6     client.send(msg.encode('utf-8'))
7     data = client.recv(1024)
8     print("recv:",data.decode())
9 client.close()
client端

发送的data必须为byte的格式,(在python2中好像不太一样,忘记了!),所以要把数据encode成utf-8的格式(utf-8可以省略不写,是默认的)在收到数据后在decode一下就可以。

这里还要注意的是int格式的数据不能encode,可以先转换成str的格式。

都敲好以后,先运行service端,然后再运行client端,就可以试一试了!

调试好以后我们可以稍微来个复杂一点的,把服务器放在linux里,客户端就还在pycharm里。但是要把代码稍微改一改,先启动linux,ifconfig一下

ip是192.168.75.130,把客户端的localhost改成这个ip地址,端口号不用换

1 import socket
2 client = socket.socket()
3 client.connect(('192.168.75.130',9999))
4 while True:
5     msg = input('>>>').strip()
6     client.send(msg.encode('utf-8'))
7     data = client.recv(1024)
8     print("recv:",data.decode("utf-8"))
9 client.close()
client端-windows
 1 import socket
 2 server = socket.socket()
 3 server.bind(('0.0.0.0',9999))
 4 server.listen()
 5 conn,addr = server.accept()
 6 print(conn,addr)
 7 print("开始")
 8 while True:
 9     data = conn.recv(1024).decode()
10     print(data)
11     conn.send(data.upper().encode())
12 server.close()
server端-linux

服务器端的ip地址要改成0.0.0.0

先后运行一下,OK

 

成功!!

备注:linux需要对防火墙进行设置,否则有可能连接失败。设置方法

https://www.cnblogs.com/yinsedeyinse/p/10230157.html

 

 

posted @ 2019-01-06 13:42  银色的音色  阅读(182)  评论(0编辑  收藏  举报