初识Socket基础-1
如何通信
在互联网上我们使用ip地址来确定一台主机,一台存在公网上的主机,如果是在内网上则通过内网ip地址确定内网主机,而我们要找到目标,不只要一个IP地址,同时还需要一个端口号,因为一台主机上有六万多个端口号,通信的时候不止是主机与主机通信,而是进程与进程之间通信,每个进程之间绑定端口,然后通信,所有要知道对面服务器进程绑定在哪个端口上,对它进行链接.
IP地址表达式[IP Address]:[Port]
服务端与客户端之间的流程
Server Client
- 创建socket 创建socket
- bind端口 连接目标
- 等待链接 开始通讯
- 开始通信 关闭连接
- 关闭连接
服务端首先创建socket,将socket绑定到某个端口上面,等待有人来连接,如果有人连接之后,就开始通信,通信完毕就后就关闭socket
客户端创建socket,直接使用socket连接目标,再直接通讯,通讯完毕关闭socket
学习笔记适用于python2,如果python3则需要另按装环境和模块,及修改一些语法
iserver
#coding:utf-8
from socket import *
#导入模块
s = socket(AF_INET.SOCK_STREAM)
#创建socket,因为导入全部则不用写socket.
#两个函数(AF_INET=ipv4地址簇,,SOCK_STREAM=TCP协议)
s.bind(('',6666))
#绑定socket到本地地址和端口(空字符代表本机,6666代表端口)
s.listen(1)
#监听端口
#1代表允许最大接纳连接数
sock,addr = s.accept
#accept特别像raw_input(),在python3中是input()
#等待客户端连接请求出现,接受请求之后会返回
#返回两次
#sock=第一次返回的是我们操作的socket
#addr=第二次返回的是连接那台机器的ip地址和端口号
print ‘Connected by’,addr
#打印一下谁连接过来的
sock.send('Welcome to my blog')
#发送信息
text = sock.recv(1024)
#接受到的信息赋值,1024是接受缓冲区的长度
print text
#打印接收的长度
sock.close()
s.close()
关闭socket
iClient
coding:utf-8
from socket import *
#导入模块
c = socket(AF_INET,SOCK_STREAM)
#创建socket
c.connect(("127.0.0.1",6666))
#连接本地6666端口
text = c.recv()
#接收信息
print text
打印接收的信息
c.send("hello word")
发送信息
端口映射
如果在不同地方,需要用socket进行通信,而在自己家里需要路由器进行转发到公网,所以要提到端口映射的问题,比如说我路由器下有很多端口,我把我路由器的80号端口映射到我本机的80号端口,别人访问80号端口,就是我电脑的80号端口,映射的可以在路由器上直接设置,有时候网络比较复杂,路由器出去的时候还是一个内网,不过这个内网还是是一些承包设备,还是一些交换机之类的,还是没有公网ip,这样映射不出去,如果要像这样远程通信链接,最好使用vps,这样能保证ip不变,你写一个客户端连接公网的设备是没问题的,自己写个服务端别人连接比较麻烦
笔记来自:
i春秋暴走python