python-socket(95)

import socket

host = ''   #表示本地的所有地址
port = 12345    #端口应该大于1024
addr = (host,port)
s = socket.socket()     #默认值是基于TCP的网络套接字
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)   #设置选项,程序结束之后可以立即载运行,否则要等60秒
s.bind(addr)    #绑定地址到套接字
s.listen(1)     #启动侦听进程
cli_sock,cli_addr = s.accept()  #等待客户连接
print('client connect from:',cli_addr)
print(cli_sock.recv(1024))  #一次最多读1024字节
cli_sock.send(b'I 4 c u\r\n')   #发送的数据要求是bytes类型
cli_sock.close()
s.close()

#测试使用telnet    telnet 127.0.0.1 12345






# 可重用的TCP服务器
# TCP服务器流程中,TCP服务器只能一个客户端连接,
# 客户端也只能发送一条消息。本例允许客户端发送多条消息,输入end结束。
# 客户端退出后,服务器程序不再退出,可以为下一个客户端提供服务:

import socket

host = ''
port = 12345
addr = (host,port)
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(addr)
s.listen(1)
while True:
    cli_sock,cli_addr = s.accept()
    print('client connect from:',cli_addr)
    while True:
        data = cli_sock.recv(1024)
        if data.strip() == b'end':
            break
        print(data.decode('utf8'))  #bytes类型转为string类型
        data = input('>') + '\r\n'  #获得的是string类型
        cli_sock.send(data.encode('utf8'))  #转成bytes类型发送
    cli_sock.close()
s.close()





#简单而完整的TCP服务器
# 客户端可以通过telnet 127.0.0.1 12345来访问。
# 每发送一段文字,将会收到加上当前时间的文字。

import socket
from time import strftime

class TcoTimeServer:
    def __init__(self,host='',port=12345):
        self.addr = (host,port)
        self.serv = socket.socket()
        self.serv.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        self.serv.bind(self.addr)
        self.serv.listen(1)

    def chat(self,c_sock):
        while True:
            data = c_sock.recv(1024)
            if data.strip() == b'quit':
                break
            data = '[%s] %s' % (strftime('%Y-%m-%d %H:%M:%S'),data.decode('utf8'))
            c_sock.send(data.encode('utf8'))
        c_sock.close()

    def mainloop(self):
        while True:
            cli_sock,cli_addr = self.serv.accept()
            self.chat(cli_sock)
        self.serv.close()

if __name__ == '__main__':
    s = TcpTimeServer()
    s.mainloop()




#简单的TCP客户端
import socket

host = '192.168.4.254'  #服务器IP地址
port = 12345    #服务器端口
addr = (host,port)
c = socket.socket()
c.connect(addr)
while True:
    data = input('>') + '\r\n'
    c.send(data.encode('utf8')) #先发送消息
    if data.strip() == 'end':   #后再进行判断
        break
    data = c.recv(1024)
    print(data.decode('utf8'))
c.close()





#简单的UDP服务器流程
# UDP是非面向连接的,不用listen、不用accept。
# UDP不区分客户端,就算是同一客户端发来的多个数据包,udp服务器也不区分,
# 与处理多个客户端发来的数据包等同对待。

import socket
from time import strftime

host = ''
port = 12345
addr = (host,port)
s = socket.socket(type=socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(addr)
while True:
    data,cli_addr = s.recvfrom(1024)
    clock = strftime('%H:%M:%S')
    data = data.decode('utf8')
    data = '[%s] %s' % (clock,data)
    s.sendto(data.encode('utf8'),cli_addr)
s.close()





#简单的UDP客户端流程
#UDP客户端非常简单,只要把数据发送到服务器就可以了
import socket

host = '192.168.4.254'
port = 12345
addr = (host,port)
c = socket.socket(type=socket.SOCK_DGRAM)
while True:
    data = input('>')
    if data.strip() == 'quit':
        break
    c.sendto(data.encode('utf8'),addr)
    print(c.recvfrom(1024)[0].decode('utf8'))
    #print(c.recvfrom(1024))
c.close()





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值