sockets模块

 TCP服务器

#! /usr/bin/env python
# -*- coding:utf-8 -*-

import socket
import os

server  = socket.socket()
server.bind(( 'localhost' ,  6969 ))  #绑定被监听端口
server.listen( 5 )   #监听端口
while True :
  print ( "我要开始等电话了" )
  conn, addr  = server.accept()  # 就是等待的意思
  #conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例
  print ( "电话来了%s" % [conn, addr])
  while True :
    data  = conn.recv( 1024 )
    if not data:
      print ( 'client is lost.' )
      break
    # res = os.popen(data).read() #popen就是打开命令执行,read就是获取结果
    # with open('filename', 'r') as ret: #这两行就 可以用过来传输文件了。
    #   data = ret.read()
    print ( 'receive:' ,data)
    conn.send(data.upper())
server.close()

TCP客户端

#! /usr/bin/env python
# -*- coding:utf-8 -*-

import socket


client  = socket.socket()  #声明socket类型,同时生成socket链接对象
client.connect(( 'localhost' , 6969 ))   #localhost就是本机地址

while True :
  msg  = input ( 'input msg >>:' ).strip()
  if len (msg)  = = 0 :  continue #检查msg的信息,防止无输入信息
  #client.send(b"Hello, world!") #发送信息
  client.send(msg.encode( 'utf-8' ))

  data  = client.recv( 1024 )  #默认接受1024字节,就是1k
  # with open('filename', 'w') as ret: # 这两行就 可以用过来传输文件了。
  #   ret = data.write()
  print (data.decode())
client.close()  #关闭端口

 UDP 服务器

import socket
def main():
    # 1创建套接字
    udp_socket  = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 2.绑定一个本地信息
    localaddr  = ( "localhost" , 6969 )  # 必须绑定自己电脑IP和port
    udp_socket.bind(localaddr)
    # 3.接收数据
    while True :
        recv_data  = udp_socket.recvfrom( 1024 )
        # recv_data存储元组(接收到的数据,(发送方的ip,port))
        recv_msg  = recv_data[ 0 ]  # 信息内容
        send_addr  = recv_data[ 1 ]  # 信息地址
        # 4.打印接收到的数据
        # print(recv_data)
        print ( "信息来自:%s 内容是:%s" % ( str (send_addr),recv_msg.decode( "utf-8" )))
    # 5.退出套接字
    udp_socket.close()
if __name__  = = "__main__" :
    main()

  UDP 客户端

import socket
def main():
    # 创建一个套接字
    udp_socket  = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    while True :
        # 从键盘获取数据
        send_data  = input ( "请输入要发送的数据:" )
        # 退出函数
        if send_data  = = "exit" :
            break
        # 可以使用套接字收发数据,此时未绑定发送的端口号,系统每次会随机分配一个
        # udp_socket.sendto("hahaha",对方的IP和port)
        # udp_socket.sendto(b"lalala123",("172.17.3.97",8080))
        udp_socket.sendto(send_data.encode( "utf-8" ),( "localhost" , 6969 )) 

    # 关闭套接字
    udp_socket.close()
if __name__  = = '__main__' :
    main()
posted @ 2022-03-07 09:16  wuyuan2011woaini  阅读(39)  评论(0编辑  收藏  举报