博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python socket网络编程
阅读量:4550 次
发布时间:2019-06-08

本文共 2251 字,大约阅读时间需要 7 分钟。

计算机通过网卡通信,一台计算机可以有多个网卡。

通信线路可传递各种类型的数据,遵循不同的通信协议。

socket:相当于通信双方的端口。

机器上最多开放的端口数:65535.

建立连接需要IP地址和端口号。

每个机器有IP地址,有端口号,通信时找到IP地址,再找到具体的端口号,因为机器上可以同时运行很多程序,所以需要同时开放很多端口。

发送端伪代码:

import socketsocket.TCP/IPconnect(server.ip,server.port)socket.send('hello,world')socket.recv()       #发送端也可以接收服务器传来的数据socket.close()        #关闭端口

 

 服务器端伪代码:

import socketsocket.TCP/IPlisten(0.0.0.0,1234)    #0.0.0.0是IP地址,一个服务器可以有多个IP地址,每个IP地址下有多个端口,接收数据时需要指定IP地址和端口#0.0.0.0是指所有IP地址,1234是端口号socket.waiting()       #等待数据传来socket.recv()     send()      #服务器也可以发送数据

socket families(地址簇,网络层):

socket.AF_UNIX  进程通过内存通信,不经过硬盘

socket.AF_INET  IPV4,网络层

socket.AF_INET6  IPV6

socket types(传输层):

socket.SOCK_STREAM  #for tcp协议

socket.SOCK_DGRAM  #for udp协议

socket.SOCK_RAW  #原始套接字,处理底层、原始的数据ICMP\IGMP等网络报文;更改IP地址;

真代码:

服务器端:

 

import socketserver=socket.socket()server.bind(('localhost',9696))server.listen()print('开始等待')conn,addr=server.accept()    #返回两个值,第一个是客户端连过来而在服务器端为其生成的一个连接实例,第二个是地址print(conn,addr)print('电话来了')data=conn.recv(1024)print('receive:', data)conn.send(data.upper())server.close()

 

 客户端:

import socketclient=socket.socket()     #声明socket类型,同时生成socket连接对象client.connect(('localhost',9696))# client.send(b"hello,world.")   #只能以字节的格式发送,b代表byte,b只能转换ACS码,不能转换中文 client.send("胖虎就是刚田武".encode('utf-8'))    #中文转换为bytesdata=client.recv(1024)print('recv:',data.decode())  #把bytes转换为utf-8client.close()

 多次传输信息:

服务器端:

import socketserver=socket.socket()server.bind(('localhost',9696))server.listen()print('开始等待')conn,addr=server.accept()    #返回两个值,第一个是客户端连过来而在服务器端为其生成的一个连接实例,第二个是地址print('电话来了')while True:    data=conn.recv(1024)    print(type(data))   #data是bytes类型    print(type(data.decode()))      #data.decode()是str类型    print('receive:',data.decode()) #收到的是bytes,需要decode()解码成string    conn.send(data.upper())server.close()

 客户端:

import socketclient=socket.socket()     #声明socket类型,同时生成socket连接对象client.connect(('localhost',9696))# client.send(b"hello,world.")        #只能以字节的格式发送,b代表byte,b只能转换ACS码,不能转换中文# client.send("胖虎就是刚田武".encode('utf-8'))  #中文转换为byteswhile True:    massage=input('输入要发送的内容:').strip()    client.send(massage.encode('utf-8'))    data=client.recv(1024)    print('receive:',data.decode())client.close()

 

转载于:https://www.cnblogs.com/zhhy236400/p/9787173.html

你可能感兴趣的文章
hdu 3368 曾经下过的棋
查看>>
Linux Shell 删除三天前文件
查看>>
微信小程序 使用mpvue
查看>>
常用模块-02
查看>>
接口测试总结
查看>>
测试的基本概念
查看>>
【ZOJ】3209 Treasure Map
查看>>
ActiveMQ 消息队列服务
查看>>
《程序是给自己看的还是给别人看的》
查看>>
(12) PHP 随笔---Smarty模板引擎 单模板多缓存、局部不缓存 20--21
查看>>
【转】Math.Atan2 方法
查看>>
C++设计模式之工厂方法模式
查看>>
poj3984_bfs+回溯路径
查看>>
MyEclipse使用技巧
查看>>
[译]径向镜片反畸变滤波
查看>>
畅通工程-最小生成树+并查集
查看>>
top命令输出解释以及load average 详解及排查思路
查看>>
Ajax的封装
查看>>
Java传入参数个数不确定可用(Type ... values)
查看>>
POJ 2081
查看>>