玩转网络-初识Socket基础-1

初识Socket基础-1

如何通信
在互联网上我们使用ip地址来确定一台主机,一台存在公网上的主机,如果是在内网上则通过内网ip地址确定内网主机,而我们要找到目标,不只要一个IP地址,同时还需要一个端口号,因为一台主机上有六万多个端口号,通信的时候不止是主机与主机通信,而是进程与进程之间通信,每个进程之间绑定端口,然后通信,所有要知道对面服务器进程绑定在哪个端口上,对它进行链接.
IP地址表达式[IP Address]:[Port]

服务端与客户端之间的流程
   Server     Client

  1. 创建socket    创建socket
  2. bind端口     连接目标
  3. 等待链接     开始通讯
  4. 开始通信     关闭连接
  5. 关闭连接

服务端首先创建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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值