Python网络编程基础笔记

IP地址的四个等级

A类:1.0.0.0~126.255.255.255
默认子网掩码255.0.0.0
B类:128.0.0.0~191.255.255.255
默认子网掩码255.255.0.0
C类:192.0.0.0~223.255.255.255
默认子网掩码255.255.0.0
D类:224.0.0.0~239.255.255.255
E类:240.0.0.0~255.255.255.255 一般用于研究用途..
本机地址:127.0.0.0~127.255.255.255为环回地址,用于本地环回测试等用途

我们用 socket()函数来创建套接字

常用套接字

服务器端

.bind()绑定地址

.listen()开始TCP监听,该值至少为1

.accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来

客户端

.connect()主动初始化TCP服务器连接,如果连接出错,返回socket.error错误

公共的

.recv()接收TCP数据,数据以字符串形式返回

.send()发送TCP数据

.close()关闭套接字

服务器端

import socket
import threading
serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serversocket.bind(("localhost",9999))#绑定服务地址和端口号localhost=127.0.0.1    9999位端口
print("服务器已等待")
serversocket.listen(5)#最多同时接收5个
msg=None #定义一个全局的变量,用来存储聊天信息,临时存储当前抢到线程的数据
lock=threading.Lock()
mythread=threading.Condition(lock)

def server_recv(c,a):#接受客户端消息
    global msg
    while True:
        mystr=c.recv(1024)
        mythread.acquire()#线程同步
        msg = str(a) + mystr.decode()
        print(msg)
        mythread.notify_all()
        mythread.release()

def server_send(c,a):#发送给客户端消息
    global  msg
    while True:
        mythread.acquire()
        mythread.wait()
        mythread.release()
        c.send(msg.encode())
        print(msg)

while True:
    c,a=serversocket.accept()
    threading._start_new_thread(server_recv,(c,a))
    threading._start_new_thread(server_send,(c,a))

客户端

import socket
import threading
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("localhost",9999))

def myrerv(c):
    while True:
        msg = c.recv(1024)  # 接收消息
        print(msg.decode('utf-8'))
threading._start_new_thread(myrerv,(client,))

def myinput():
    while True:
        msg=input()
        client.send(msg.encode('utf-8'))
threading._start_new_thread(myinput())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值