python学习---socket编程

1、TCP/IP协议包括TCP和UDP协议两种

1)TCP协议类似打电话,传输可靠,但是暂用资源

TCP Socket通信:

TCP Socket通信过程:(一般情况下图形界面程序需要使用多线程,让其中一个线程等待/监听客户端请求,其他线程处理别的任务)

这个Socket通信和TCP的三次握手、四挥手是一码事吗?

1-1)python提供了两个socket模块:socket和socketserver(socketserver是面向socket 服务器端的开发)

一个简单的聊天工具示例:

新建一个server.py编写socket服务器端的程序:

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)   #创建socket,AF_INET代表ipv4,SOCK_STREAM代表TCP连接
s.bind(('',8888))   #‘’代表绑定本机ip的8888端口
s.listen(10)  #监听8888端口,最大连接数10

print('服务器端启动。。。')
#等待客服端的请求
conn,address=s.accept()  #socket.accept()等待客服端的请求,等待成功返回(conn,address)conn是新的socket对象,用来发送接受消息
#客户端连接成功
print(address)
#开始通信
data=conn.recv(1024)
print('从客户端接受到的数据:{0}'.format(data.decode()))
#给客户端发送数据
conn.send('你好'.encode())  #'你好'.encode(),使用b'你好'会报错,因为bytes can only contain ASCII literal characters
#释放资源
s.close()

接着建立一个client.py编写socket客服端的程序:服务器端启动。。。 

然后就开始等待了,当运行了client.py后,

server.py的控制台输出:

服务器端启动。。。
('127.0.0.1', 53784)
从客户端接受到的数据:hello

client.py控制台输出:

连接建立
从服务器端接收消息:你好

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接服务器
s.connect(('127.0.0.1',8888))
print('连接建立')

#给服务器发送消息
s.send(b'hello')
#从服务器接受数据
data=s.recv(1024)
print('从服务器端接收消息:{0}'.format((data.decode())))
#释放资源
s.close()

运行程序的时候先运行server.py,运行之后可以看到控制台输出:

一个上传文件的示列:

服务端:

# coding=utf-8
# 代码文件:chapter18/18.2.5/upload-server.py

import socket

HOST = ''
PORT = 8888

f_name = 'coco2dxcplus_copy.jpg'

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen(10)
    print('服务器启动...')

    while True:   #这个循环会让服务端一直处于监听状态
        with s.accept()[0] as conn:
            # 创建字节序列对象列表,作为接收数据的缓冲区
            buffer = []
            while True:  # 反复接收数据
                data = conn.recv(1024)
                if data:  
                    # 接收的数据添加到缓冲区
                    buffer.append(data)
                else:
                    # 没有接收到数据则退出
                    break
            # 将接收的字节序列对象列表合并为一个字节序列对象
            b = bytes().join(buffer)
            with open(f_name, 'wb') as f:
                f.write(b)

            print('服务器接收完成。')

客服端:

 coding=utf-8
# 代码文件:chapter18/18.2.5/upload-client.py

import socket

HOST = '127.0.0.1'
PORT = 8888
f_name = 'coco2dxcplus.jpg'

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))

    with open(f_name, 'rb') as f:
        b = f.read()
        s.sendall(b)
        print('客户端上传数据完成。')

运行完成后复制了一张一样的图片,并且因为服务端一直在监听,没有断开,只要客户端运行一次服务端就会复制一张

2)UDP协议类似书面信件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值