python,socket的简单应用(UDP和TCP),sockerserver

一、UDP
1.服务端

# !/usr/bin/env python

from socket import *    #导入模块

HOST = '127.0.0.1'  # ip地址
PORT = 9999         # 端口号
Addr=(HOST,PORT)

s = socket(AF_INET, SOCK_DGRAM)   #创建UDP连接
s.bind((HOST, PORT))                           #绑定服务器地址
#s.bin(Addr)

print('waiting for message..')       #打印

while True:                                #服务器无限循环
	print('等待连接......')
	data, address = s.recvfrom(1024)   #接受客户的连接
	print(data, address)
	#s.sendto(bytes('this is the UDP server',address))
	#s.send(bytes(address,"utf-8"))
	message=bytes('this is the UDP server','utf-8') # 将消息转为字节类型
	s.sendto( message,address)   # 发送UDP数据
#conn.send(bytes("connected from %s:%s." % addr, "utf-8"))  # 发送给客户端
s.close()             #关闭服务器连接

2.客户端

from socket import *

HOST = '127.0.0.1'
PORT = 9999

s = socket(AF_INET, SOCK_DGRAM)
s.connect((HOST, PORT))
while True:
    message = input('send message:>>')
    if not message:
        break
    s.sendall(bytes(message,'utf-8'))
    data = s.recv(1024)
    print(data)
s.close()

3.运行结果
服务端

waiting for message..
b'hello' ('127.0.0.1', 63491)
b'hi' ('127.0.0.1', 63491)

客户端

send message:>>hello
b'this is the UDP server'
send message:>>hi
b'this is the UDP server'
send message:>>

二、TCP

1.代码:socket有客户端和服务端,先写服务端,服务端一般内容比较多。

import socket         # 导入socket模块
# 建立一个服务端
sk = socket.socket()  # 创建socket对象
print(sk)              # 输出socket对象参数
HOST = '127.0.0.1'    #指定ip
PORT = 2222           #侦听端口
BUFSIZ = 1024         #缓存大小
ADDR = (HOST,PORT)    #套接字

sk.bind(ADDR)          #套接字ip端口进行绑定
sk.listen(5)           #等待客户端连接,连接等待数,默认5
print("waiting...")

while True:  # 服务器无限循环,conn就是客户端连接过来而在服务端为期生产的一个链接实例
    conn,addr = sk.accept() # 建立客户端连接,并返回新的套接字和IP地址
    ip,port = addr  # 返回IP地址和端口号
    print("Got connection from",addr)

    conn.send(bytes("connected from %s:%s." %addr,"utf-8"))  #发送给客户端

    while True:  # 通讯无限循环
        data = conn.recv(BUFSIZ)  #接受数据
        if not data:
            break                 #直接回车退出本次连接
        print(data)               #打印接收到的数据
        conn.send(data)           #然后再发送数据
conn.close()                      #关闭连接
s.close()                         #关闭连接

2.客户端

import socket
#客户端
HOST = '127.0.0.1'
PORT = 2222
BUFSIZ = 1024
ADDR = (HOST,PORT)
cl = socket.socket()
cl.connect(ADDR)                  #建立一个连接,连接到本地的2222端口
print(cl.recv(BUFSIZ))            #打印收到的消息
while True:
    inp = input(">>>")            #输入数据
    if not inp:                   #忽略空格回车
        continue
    cl.send(bytes(inp,"utf-8"))  #发送消息
    print(cl.recv(BUFSIZ))       #打印收到的消息
cl.close()                       #关闭这个连接

3.运行结果

<socket.socket fd=504, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
waiting...
Got connection from ('127.0.0.1', 60331)
b'hello'
b'hi'
b'python'
b'connected from 127.0.0.1:60331.'
>>>hello
b'hello'
>>>hi
b'hi'
>>>python
b'python'
>>>

三、sockerserver
1.服务端

#coding:utf-8
import socketserver                                          #导入socket server,能实现并发
#并发聊天
class MyServer(socketserver.BaseRequestHandler):  # 请求处理类,创建一个继承自 SocketServer.BaseRequestHandler 的类
    print("服务端启动...")
    def handle(self):                                         # 定义handle方法
        while True:
            conn = self.request                                # 创建一个线程用来处理请求
            print (self.client_address)                        # 打印ip和端口号
            while True:
                client_data=conn.recv(1024)                    # 接收客户端消息
                print (str(client_data,"utf8"))               # 打印接收到的客户端的消息
                print ("waiting...")
                server_response=input(">>>")
                conn.sendall(bytes(server_response,"utf8"))  #把消息发给客户端
            conn.close()                                     #关闭连接

if __name__ == '__main__':                                   # server.py文件被直接运行时,以下代码块将被运行
    server = socketserver.ThreadingTCPServer(('127.0.0.1',2223),MyServer)  # 启动ThreadingTCPServer
    server.serve_forever()                                   # 处理多个请求,一直执行

2.客户端

#coding:utf-8
import socket

ip_port = ('127.0.0.1',2223)   #套接字
sk = socket.socket()
sk.connect(ip_port)   #建立连接
print ("客户端启动:")
while True:
    inp = input('>>>')
    sk.sendall(bytes(inp,"utf-8"))  #把消息发送给服务端
    if inp == 'exit':
        break
    server_response=sk.recv(1024)   #接受消息
    print (str(server_response,"utf-8"))
sk.close()                          #关闭连接

3.运行结果

服务端启动...
('127.0.0.1', 60314)
hello
waiting...
>>>hi
I
waiting...
>>> i
'm a boy.
waiting...
>>>
客户端启动:
>>>hello
hi
>>>I'm a boy.
 i
>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值