簡體   English   中英

服務器無法解碼C字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM