歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python調用遠程Socket接口

Python調用遠程Socket接口

日期:2017/3/1 10:18:58   编辑:Linux編程

Web應用通信通常都喜歡用HTTP接口,但不排除直接socket通信的情況。

socket除了server端構建麻煩些(需要考慮很多實際情況),對於調用者來說構建個client端其實不比http麻煩多少。

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Auther: linvo
  4. import socket
  5. class Client(object):
  6. """
  7. 調用遠程Socket接口
  8. <code>
  9. try:
  10. obj = Client(host, port)
  11. ret = obj.send(data)
  12. except Exception, e:
  13. ret = e
  14. </code>
  15. """
  16. def __init__(self, host, port, timeout = 5):
  17. """
  18. 鏈接遠程接口服務
  19. """
  20. self.sock = None
  21. try:
  22. socket.setdefaulttimeout(timeout)
  23. self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  24. self.sock.connect((host, port))
  25. except socket.error, e:
  26. raise Exception('SOCKET ERROR:' + str(e))
  27. except Exception, e:
  28. raise Exception('CONNECT ERROR:' + str(e))
  29. def send(self, data):
  30. """
  31. socket通信
  32. 發送和接收
  33. data: 發送的數據
  34. ret: 接收的數據
  35. """
  36. ret = None
  37. # 鏈接成功,開始傳輸
  38. if self.sock:
  39. data = str(data)
  40. try:
  41. result = self.sock.sendall(data)
  42. except Exception, e:
  43. result = str(e)
  44. if result is not None:
  45. raise Exception('SEND ERROR:' + str(result))
  46. else:
  47. # 接收
  48. ret = ''
  49. try:
  50. while True:
  51. buffer = self.sock.recv(2048)
  52. if buffer:
  53. ret += buffer
  54. else:
  55. break
  56. except Exception, e:
  57. raise Exception('RECV ERROR:' + str(e))
  58. return ret

順便給個簡易的server端,以便測試:

  1. import socket
  2. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  3. sock.bind(('localhost', 9801))
  4. sock.listen(5)
  5. while True:
  6. connection, address = sock.accept()
  7. try:
  8. connection.settimeout(5)
  9. buf = connection.recv(2048)
  10. connection.send(buf)
  11. except socket.timeout:
  12. print 'time out'
  13. connection.close()

Copyright © Linux教程網 All Rights Reserved