python socket网络编程

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

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

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

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

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

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

发送端伪代码:

import socket
socket.TCP/IP
connect(server.ip,server.port)
socket.send('hello,world')

socket.recv()       #发送端也可以接收服务器传来的数据
socket.close()        #关闭端口

 

 服务器端伪代码:

import socket
socket.TCP/IP
listen(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 socket
server=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 socket
client=socket.socket()     #声明socket类型,同时生成socket连接对象
client.connect(('localhost',9696))

# client.send(b"hello,world.")   #只能以字节的格式发送,b代表byte,b只能转换ACS码,不能转换中文
client.send("胖虎就是刚田武".encode('utf-8'))   #中文转换为bytes
data=client.recv(1024) print('recv:',data.decode())  #把bytes转换为utf-8 client.close()

 多次传输信息:

服务器端:

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

 

posted @ 2018-10-15 22:50  我的下铺刚田武  阅读(189)  评论(0编辑  收藏  举报