간단한 클라이언트/서버 프로그램이 있습니다.Python 클라이언트와 C++ 서버에서 socket을 사용하는 방법
클라이언트는이 같은 파이썬으로 작성되어
import socket
import sys
HOST, PORT = "localhost", 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
for x in range(0, 10000):
print("Step 1")
s.send(b'Hello')
print("Step 2")
print(str(s.recv(1000)))
print(x)
그리고이 같은 파이썬에서 서버를 썼다 :
import socket
HOST = ''
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
while True:
data = conn.recv(1024)
conn.sendall(data)
내가 서버의 C++ 버전을 만들려고합니다.
이#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <string>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
using namespace std;
#define SERVER_PORT htons(50007)
int main() {
char buffer[1000];
int n;
int serverSock=socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = SERVER_PORT;
serverAddr.sin_addr.s_addr = INADDR_ANY;
/* bind (this socket, local address, address length)
bind server socket (serverSock) to server address (serverAddr).
Necessary so that server can use a specific port */
bind(serverSock, (struct sockaddr*)&serverAddr, sizeof(struct sockaddr));
// wait for a client
/* listen (this socket, request queue length) */
listen(serverSock,1);
while (1 == 1) {
bzero(buffer, 1000);
sockaddr_in clientAddr;
socklen_t sin_size=sizeof(struct sockaddr_in);
int clientSock=accept(serverSock,(struct sockaddr*)&clientAddr, &sin_size);
//receive a message from a client
n = read(clientSock, buffer, 500);
cout << "Confirmation code " << n << endl;
cout << "Server received: " << buffer << endl;
strcpy(buffer, "test");
n = write(clientSock, buffer, strlen(buffer));
cout << "Confirmation code " << n << endl;
}
return 0;
}
그것은 한 번 작동하지만 클라이언트의 라인 str(s.recv(1000))
에 차단 :이했다.
이
는 클라이언트의 출력입니다 :Step 1
Step 2
b'test'
0
Step 1
Step 2
그리고 이것은 서버에서 출력됩니다 : 당신이 볼 수 있듯이
code 5
Server received: Hello
code 4
code 5
Server received: Hello
code 4
, 통신은 다음과 같이이다 :
- 클라이언트가 메시지를 보내십시오.
- 서버가 메시지를 수신합니다. 전자
- 서버는 클라이언트가
- 서버가 메시지를 수신하고 다른 메시지를 보낼 것으로 보인다 다른 메시지를 보낼 수 있지만 클라이언트를받지 못한 메시지를
- 을 보낼 수 있습니다.
무엇이 오류입니까?