[英]Server can't decode c string
我在基本計算機網絡上還具有python和c之間的另一種兼容性。
server.py
import socket
import threading
threads=[]
global c
c=0
def client_thread(client_socket):
global c
count=c
try:
message=client_socket.recv(1010)
except socket.error as error:
print('error t recv:',error)
exit(1)
print('Client #',count,' sent:',message.decode('utf-8'))
c=c-1
client_socket.close()
def main():
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
server.bind((str(socket.INADDR_ANY),1234))
except socket.error as error:
print('binding error:',error)
exit(1)
server.listen(5)
print('Server running')
while(1):
client_socket, _ =server.accept()
print('Client connected.')
th= threading.Thread(target=client_thread,args=(client_socket,))
threads.append(th)
global c
c=c+1
th.start()
if __name__ == '__main__':
main()
我的服務器應該從客戶端收到一個字符串,然后將其打印出來,這只是我檢查錯誤的一種簡便方法。
client.c
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char* argv[]){
int client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket < 0){
perror("Error at creating socket\n");
exit(1);
}
struct sockaddr_in server_address;
memset(&server_address, 0, sizeof(server_address));
server_address.sin_port= ntohs(1234);
server_address.sin_family=AF_INET;
server_address.sin_addr.s_addr= inet_addr("127.0.0.1");
if (connect(client_socket, (struct sockaddr*) &server_address, sizeof(server_address)) < 0){
perror("Can not connect to server\n");
exit(1);
}
printf("Give String:");
char message[1000];
scanf("%s",message);
send(client_socket, message, strlen(message), 0);
return 0;
}
客戶端連接,我讀了字符串,一切正常,但是我的服務器給我以下錯誤:
print('Client#',count,'send:',message.decode('utf-8'))
UnicodeDecodeError:'utf-8'編解碼器無法解碼位置3的字節0x80:無效的起始字節
提到我嘗試了一堆編碼進行解碼,似乎沒有任何效果。
除了逐個發送字符外,還有什么方法可以使它起作用?您可以引導我參考的任何信息都將有所幫助。
您發送的數據過多。 這行:
send(client_socket, &message, sizeof(message), 0);
發送整個message
緩沖區。 那不是你想要的。
相反,請嘗試以下操作:
send(client_socket, message, strlen(message), 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.