博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tcp实现网络通信
阅读量:7280 次
发布时间:2019-06-30

本文共 1707 字,大约阅读时间需要 5 分钟。

本章节使用socket套接字利用tcp在python环境下实现小文件传输功能,后续将扩展tcp链接过程中的3次握手4次挥手。

tcp网络通信中区分客户端、服务器,服务器需绑定ip、port,客户端无需绑定ip、port。

客户端:

import socket

def main():

  # 创建tcp套接字,socket.AF_INET ->对应ipv4命名规则;socket.SOCK_STREAM —>对应调用tcp套接字
  socket_tcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

  # 目的地址ip、port(注意ip地址数据类型为字符串)

  address = ('',8880)

  # tcp套接字链接目的地址

  socket_tcp.connect(address)

  file_name = input('请输入目标文件名')

  # 向服务器发送请求文件名

  socket_tcp.send(file_name.encode('utf-8'))

  # 此处阻塞,等待接受服务器返回的数据

  message = socket_tcp.recv(1024)

  # 若有返回数据,创建文件夹并写入

  if message:
    with open('new_'+file_name,'wb') as files:
      files.write(message)  

  #关闭tcp套接字

  socket_tcp.close()

if __name__ == '__main__':

  main()

 

服务器:

import socket

import threading

def recv_send(new_socket):

  # 此处阻塞,等待客户端发来消息

  message = new_socket.recv(1024)

  print(message)

  files = None

  try :
    files = open(message,'rb')
  except Exception as res:
    print('无此文件!')
  if files:
    new_socket.send(files.read())

  # 关闭tcp套接字

  # 关闭的同时默认向对方发送空字符,代表关闭套接字
  new_socket.close()

def main():

  # 创建tcp 套接字
  socket_tcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

  # tcp先发起挥手的一方要等待对方最后发来的数据2到3分钟左右占用端口,这里为方便调试去掉等待。

  socket_tcp.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

  # 绑定本地ip、port地址

  local_address = ('',8880)
  socket_tcp.bind(local_address)

  # 将tcp套接字调为被动接听状态

  socket_tcp.listen(128)

  while True:

    # 此处阻塞,服务器等待接听客户端接入
    new_socket,source_address = socket_tcp.accept()

    #创建多线程对象,target赋值为多线程函数,args赋值为传入函数的参数,形式为元组。

    t1 = threading.Thread(target = recv_send,args = (new_socket,))

    t1.start()

  socket_tcp.close()

if __name__ == '__main__':

  main()

转载于:https://www.cnblogs.com/njhbk/p/9978635.html

你可能感兴趣的文章
socket编程基础知识
查看>>
Annotation实战【自定义AbstractProcessor】
查看>>
实现自适应屏幕宽高度、超出弹出滚动条
查看>>
进程和线程关系与区别
查看>>
树链剖分总结
查看>>
Ubuntu 在Update以后任然出现找不到安装包问题解决方案
查看>>
QTableView
查看>>
制作win10 usb 启动盘
查看>>
log4net使用简介
查看>>
Angular 4.0从入门到实战
查看>>
性能测试--siege
查看>>
DNS原理和CentOS7上bind域名服务器配置详解
查看>>
从键盘输入一个班5个学生的分数,求和并输出
查看>>
HomeBrew的安装详细步骤
查看>>
js如何判断一个值是不是Array类型
查看>>
R的grep和grepl
查看>>
Linux mkdir
查看>>
Spark Pipeline
查看>>
Spark FPGrowth (Frequent Pattern Mining)
查看>>
二维vector基本使用
查看>>