我有一个基本的python server
正在侦听我的IP address
上的连接。我还有一个在unity
上运行的基本c# client
。当我从我的pc
运行它时,连接已经建立,但是当我构建apk并在我的android
手机上运行它时,什么都没有发生。我从来没有做过任何与两台设备之间的连接有关的事情,所以我很无聊。是什么阻止了我手机上的客户端连接到服务器,我如何修复它
为了演示的目的,我审查了我的IP。 服务器代码:
import socket
import threading
HOST = '123.123.123.1' # Change to your ip
PORT = 123
class Server:
def __init__(self):
self.server_socket = None
self.client1 = None
self.client2 = None
self.client1_thread = None
self.client2_thread = None
def __del__(self):
if self.server_socket is not None:
self.server_socket.close()
print("Server shutdown successful")
def setup_server_and_bind(self):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_socket.bind((HOST, PORT))
self.server_socket.listen(10)
print("Listening")
def connect_to_clients(self):
print("Waiting for users to request connection")
client_socket, port = self.server_socket.accept()
self.client1 = ClientConnection(client_socket, port)
print("Connection to Client1 established")
client_socket, port = self.server_socket.accept()
self.client2 = ClientConnection(client_socket, port)
print("Connection to Client2 established")
def handle_clients(self):
self.client1_thread = threading.Thread(target=self.handle_client, args=(self.client1,))
self.client2_thread = threading.Thread(target=self.handle_client, args=(self.client2,))
self.client1_thread.start()
self.client2_thread.start()
def handle_client(self, client_connection):
print("Started handling client")
while True:
msg = client_connection.socket.recv(1024)
print("Client sent: " + msg.decode())
client_connection.socket.send("Hello from server".encode())
class ClientConnection:
def __init__(self, socket, port):
self.socket = socket
self.port = port
if __name__ == '__main__':
server = Server()
server.setup_server_and_bind()
server.connect_to_clients()
server.handle_clients()
server.client1_thread.join()
server.client2_thread.join()
Unity客户端代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using UnityEngine;
using System.Threading;
using System.Text;
public class SendSegments
{
const int PORT = 123;
const string IP = "123.123.123.1";
#region private members
private TcpClient socketConnection;
private Thread clientReceiveThread;
#endregion
public SendSegments()
{
ConnectToTcpServer();
}
/// <summary>
/// Setup socket connection.
/// </summary>
public void ConnectToTcpServer()
{
try
{
clientReceiveThread = new Thread(new ThreadStart(ListenForData));
clientReceiveThread.IsBackground = true;
clientReceiveThread.Start();
}
catch (Exception e)
{
Debug.Log("On client connect exception " + e);
}
}
/// <summary>
/// Runs in background clientReceiveThread; Listens for incoming data.
/// </summary>
private void ListenForData()
{
try
{
socketConnection = new TcpClient(IP, PORT);
Byte[] bytes = new Byte[10240];
while (true)
{
// Get a stream object for reading
using (NetworkStream stream = socketConnection.GetStream())
{
int length;
// Read incoming stream into byte array.
while ((length = stream.Read(bytes, 0, bytes.Length)) != 0)
{
var incomingData = new byte[length];
Array.Copy(bytes, 0, incomingData, 0, length);
// Convert byte array to string message.
string serverMessage = Encoding.ASCII.GetString(incomingData);
Debug.Log("server message received as: " + serverMessage);
}
}
}
}
catch (SocketException socketException)
{
Debug.Log("Socket exception: " + socketException);
}
}
/// <summary>
/// Send message to server using socket connection.
/// </summary>
public void SendBytes(byte[] clientMessageAsByteArray)
{
if (socketConnection == null)
{
return;
}
try
{
// Get a stream object for writing.
NetworkStream stream = socketConnection.GetStream();
if (stream.CanWrite)
{
stream.Write(clientMessageAsByteArray, 0, clientMessageAsByteArray.Length);
Debug.Log("Client sent his message - should be received by server");
}
}
catch (SocketException socketException)
{
Debug.Log("Socket exception: " + socketException);
}
}
}
Python客户端代码:
import socket
HOST = '123.123.123.1'
PORT = 123
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((HOST, PORT))
except Exception as e:
print("Cannot connect to the server:", e)
print("Connected")
sock.send("Client1".encode())
print(sock.recv(1024).decode())
sock.recv(1024)
因为服务器等待两个连接,所以我从phone/pc运行unity客户端,从pc运行python演示客户端。unity客户端可以在pc上工作,但不能在phone上工作
目前没有回答
相关问题 更多 >
编程相关推荐