Python之Socket网络编程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/isaiah282485068/article/details/86799228

 

TCP编程:

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

socket和file的区别:

  1、file模块是针对某个指定文件进行【打开】【读写】【关闭】

  2、socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

Python中提供了两个与socket相关的模块:socket和socketserver。其中socket模块提供了标准的BSD Socket API,而socketserver提供了网络服务器的开发

socket类:表示Socket,给构造器传入不同的参数可以使用不同形式的socket

操作方法:

bind(self, address): 绑定地址和商品,参数address代表包含ip和端口的一个二元组

listen(self, backlog=None): 监听端口,参数backlog代表最大连接数据,默认为1

s.accept(): 等待客户端连接,返回值为包含新的socket对象和客户端ip的二元组

recv(self, buffersize, flags=None): 接收数据

  send(self, data, flags=None):  发送数据,如果发送数据很大,需要多次调用该方法进行多次发送

sendall(self, data, flags=None): 连续发送数据,直接发送完毕所有数据或发生异常为止
 connect(self, address):将客户端连接到服务器端

范例一:简单聊天工具

服务端代码:



# encoding=utf=8

import socket


HOST = ''
PORT = 9999

# 1 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2 绑定ip和端口
s.bind((HOST, PORT))

# 3 监听端口
s.listen(100)

print('服务器启动...')

# 4 等待客户端连接
conn, addr = s.accept();

print(addr)

# 5 接收客户端数据
data = conn.recv(1024)

print('从客户端接收消息:{0}'.format(data.decode()))

# 6 向客户端发送数据
conn.send("hello client".encode())

# 7 释放socket
conn.close()
s.close()



客户端代码:



# encoding=utf=8

import socket


HOST = '127.0.0.1'
PORT = 9999

# 1 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


# 2 连接服务器
s.connect((HOST, PORT))

# 3 向服务器发送数据
s.send(b'hello server')

# 4 从服务器端接收数据
data = s.recv(1024)
print('从服务器端接收来的消息:{0}'.format(data.decode()))


# 5 释放socket
s.close()



范例二:文件上传功

服务端代码:upload_server.py

# coding-utf-8

import socket

HOST = ''
PORT = 9999
f_name = 'temp.txt'

# 1 创建socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

    # 2 绑定IP地址和端口号
    s.bind((HOST, PORT))

    # 3 开始监听
    s.listen(10)

    print('服务器启动...')


    while True:
        #  4 接收客户端口的连接
        with s.accept()[0] as  conn:
            buff = []
            while True:
                #  5 接收数据
                data = conn.recv(1024)
                if data:
                    buff.append(data)
                else:
                    break
                # 将字节列表合并成一个字节列表对象
                b = bytes().join(buff)

                with open(f_name, 'wb') as f:
                    f.write(b)

                print('服务器接收数据完成!')

客户端代码:upload_client.py

# coding-utf-8

import socket

HOST = '127.0.0.1'
PORT = 9999
file_name = 'data.txt'

# 1 创建socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

    # 2 连接服务器
    s.connect((HOST, PORT))

    with open(file_name, 'rb') as f:
        b = f.read()

        # 3 发送数据
        s.sendall(b)
        print('客户端上传数据完成!')

UDP编程:

 

猜你喜欢

转载自blog.csdn.net/isaiah282485068/article/details/86799228