Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python进行套接字通信时出错_Python - Fatal编程技术网

使用python进行套接字通信时出错

使用python进行套接字通信时出错,python,Python,我正在尝试使用一个套接字与使用python的客户机-服务器通信,我希望通过我的客户机发送一个纬度、经度、一个小时和一个日期,以获取grib文件中的压力和温度,但是我的客户机脚本给了我这个错误 Client“JSON_OBJECT=response.loads(response.read()) AttributeError:“str”对象没有“loads”属性 在我的服务器上,我觉得错误在这个位置 "Conn.send (get_pressure_and_temperature (request_

我正在尝试使用一个套接字与使用python的客户机-服务器通信,我希望通过我的客户机发送一个纬度、经度、一个小时和一个日期,以获取grib文件中的压力和温度,但是我的客户机脚本给了我这个错误

Client“JSON_OBJECT=response.loads(response.read()) AttributeError:“str”对象没有“loads”属性

在我的服务器上,我觉得错误在这个位置

"Conn.send (get_pressure_and_temperature (request_string))"
"JSON_OBJECT = json.loads (request_string)"
这是我的客户代码

import socket
import os
import sys
import json


timestamp   = 20160210  
hour        = 6
latitude    = 20
longitude   = 20

HOST = ''    # The remote host
PORT = 10000              # The same port as used by the server

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
#latitude = raw_input ("latitude: \t" )
#longitude = raw_input ("longitude: \t" )
#s.send(latitude)
#s.send(longitude)
#s.send(string)
string = {"timestamp": timestamp, "hour": hour, "lat": latitude, "long": longitude}
s.send(json.dumps(string))
response = s.recv(1024)
json_object = response.loads(response)
s.close()
print 'Received', repr(json_object)
服务器的主要功能是:

必要进口

import math
import numpy
import pygrib
import sys
import time
import pressure_temperature
import aux
import socket
import os
import json

args=sys.argv               # List of arguments of the comand line

def get_pressure_and_temperature(request_string):
    json_object = json.loads(request_string)
    print json_object
    timestamp = int(json_object["timestamp"])
    print timestamp
    hour = float(json_object["hour"])
    print hour
    latitude = float(json_object["lat"])
    print latitude
    longitude = float(json_object["long"])
    print longitude
    pressure_temperature_result = pressure_temperature.build_data(timestamp, hour, latitude, longitude)
    print "result = ", pressure_temperature_result
    return json.dumps(pressure_temperature_result) 

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 10000              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)

while True:
    conn, cliente = s.accept()
    pid = os.fork()
    if pid == 0:
        s.close()
        print 'Connected by', cliente
        while True:
                        request_string = conn.recv(1024)
            conn.send(get_pressure_and_temperature(request_string))
            if not request_string: break
            print "ok"
        print "Finalizando conexao com cliente", cliente
        #conn.close()
        sys.exit(0)
    else:
        conn.close()

我想你的意思是
json.loads(response)
对不起,你能指给我看吗?我看到了,谢谢,这里
json\u object=response.loads(response)
应该是
json\u object=json.loads(response)
。因为
response
是字符串(或字节)您需要使用
json
模块将其转换为具有函数的json对象