查看: 429|回复: 0
打印 上一主题 下一主题

Python实现tcp服务端和客户端通信

[复制链接]

45

主题

47

帖子

618

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
618
跳转到指定楼层
楼主
发表于 2018-11-20 21:17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 服务端Server
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-

  3. import socket
  4. import threading
  5. import time

  6. def tcp_thread(sock,addr):
  7. ? ? print('new connection from %s,%s'%addr)
  8. ? ? log('new connection from %s,%s'%addr)
  9. ? ?
  10. ? ? sock.send(b'welcome')
  11. ? ? try:
  12. ? ?? ???while True:
  13. ? ?? ?? ?? ?#receiving up to 1k bytes at a time
  14. ? ?? ?? ?? ?data=sock.recv(1024)
  15. ? ?? ?? ?? ?if not data or data.decode('utf-8')=='exit':
  16. ? ?? ?? ?? ?? ? break
  17. ? ?? ?? ?? ?sock.send(data)
  18. ? ?? ?? ?? ?
  19. ? ?? ?? ?? ?print(data.decode('utf-8'))
  20. ? ?? ?? ?? ?
  21. ? ?? ?? ?? ?(ip,port)=addr
  22. ? ?? ?? ?? ?log('%s:%s %s'%(ip,port,data.decode('utf-8')))

  23. ? ?? ???sock.close()
  24. ? ? except Exception as err:
  25. ? ?? ???print(err)
  26. ? ? finally:
  27. ? ?? ???sock.close()

  28. def start_tcp_server(ip,port):
  29. ? ? #create socket
  30. ? ? server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  31. ? ? #bind port
  32. ? ? addr=(ip,port)
  33. ? ? server.bind(addr)
  34. ? ? #starting listening,allow 10 connection
  35. ? ? try:
  36. ? ?? ???print ("starting listen on ip %s, port %s"%addr)
  37. ? ?? ???server.listen(10)
  38. ? ? except socket.err as e:
  39. ? ?? ???print ("fail to listen on port %s"%e)
  40. ? ?? ???sys.exit(1)
  41. ? ? #accept client connect
  42. ? ? while True:
  43. ? ?? ???print ("\r\nwaiting for client connection")
  44. ? ?? ???client,addr=server.accept()
  45. ? ?? ???#create a thread to handle tcp link
  46. ? ?? ???thread=threading.Thread(target=tcp_thread,args=(client,addr))
  47. ? ?? ???thread.start()
  48. ? ?? ???
  49. def log(msg):
  50. ? ? tm=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  51. ? ? #writes the data to file
  52. ? ? with open('server-debug.log','a') as f:
  53. ? ?? ???f.write('[%s] %s\r\n'%(tm,msg))

  54. if __name__ == '__main__':
  55. ? ? host=socket.gethostname()
  56. ? ? ip=socket.gethostbyname(host)
  57. ? ?
  58. ? ? start_tcp_server(ip,6800)
  59. ? ? #start_tcp_server('0.0.0.0',6800)
复制代码


2. 客户端Client

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-

  3. import socket
  4. import datetime

  5. #create socket
  6. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  7. host=socket.gethostname()
  8. ip=socket.gethostbyname(host)

  9. #connect to server
  10. local=False
  11. if local:
  12. ? ? s.connect((ip,6800))
  13. else:
  14. ? ? s.connect(('47.98.163.223',6800))

  15. #send test data
  16. #s.send(b'tcp test')

  17. #receive data
  18. buf = []
  19. while True:
  20. ? ? #receiving up to 1k bytes at a time
  21. ? ? d = s.recv(1024)
  22. ? ? if d:
  23. ? ?? ???buf.append(d)
  24. ? ?? ???#print(buf)
  25. ? ?? ???print(d)

  26. ? ?? ???msg = input('please input data\r\n>>')
  27. ? ?? ???s.send(msg.encode('utf-8'))
  28. ? ?? ???#break
  29. ? ? else:
  30. ? ?? ???break

  31. s.close()

  32. data = b''.join(buf)

  33. print(data)

  34. #writes the data to file
  35. tm=datetime.datetime.now()
  36. with open('client-debug.log','a') as f:
  37. ? ? f.write('[%s] %s\r\n'%(tm,data))

复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表