python与Go之间的tcp通信-传输json消息

  1. python作为服务端, tcp作为客户端
  2. 传输多条json格式的信息

python 端 ( 服务端 )

  1. import socket
  2. import json
  3. if __name__ == '__main__':
  4. IP = "localhost"
  5. port = 40005
  6. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  7. s.bind((IP, port))
  8. s.listen(1)
  9. print('listen at port :', port)
  10. conn, addr = s.accept()
  11. print('connected by', addr)
  12. while True:
  13. data = conn.recv(1024)
  14. data = data.decode()
  15. if not data:
  16. break
  17. data = json.loads(data)
  18. print(data['OrderID'])
  19. # 发送一个消息防止两条json消息粘合
  20. conn.send(str.encode('1'))
  21. conn.close()
  22. s.close()

Go ( 客户端 )

  1. package main
  2. import (
  3. "encoding/json"
  4. "log"
  5. "net"
  6. )
  7. type Work struct {
  8. OrderID string
  9. OrderName string
  10. Owner string
  11. Sender string
  12. Reciever string
  13. }
  14. func main() {
  15. var work Work
  16. var work_list []Work
  17. work.OrderID = "123"
  18. work.OrderName = "asdfasf"
  19. work.Owner = "hi"
  20. work.Sender = "hi"
  21. work.Reciever = "hi"
  22. work_list = append(work_list, work)
  23. work_list = append(work_list, work)
  24. work_list = append(work_list, work)
  25. work_list = append(work_list, work)
  26. server := "localhost:40005"
  27. tcpAddr, err := net.ResolveTCPAddr("tcp4", server)
  28. if err != nil {
  29. log.Println("Fatal error")
  30. }
  31. conn, err := net.DialTCP("tcp", nil, tcpAddr)
  32. if err != nil {
  33. log.Println("Fatal error")
  34. }
  35. log.Println("connection success")
  36. for _, value := range work_list {
  37. recall, err := json.Marshal(value)
  38. if err != nil {
  39. log.Println("error")
  40. }
  41. conn.Write([]byte(recall))
  42. buffer := make([]byte, 2048)
  43. n, err := conn.Read(buffer)
  44. log.Println(n)
  45. //conn.Write([]byte(""))
  46. }
  47. log.Println("send over")
  48. conn.Close()
  49. }