簡體   English   中英

套接字中的 Java 客戶端

[英]Java client in socket

我一直在尋找一種方法來使用 java 連接到在 Python 中創建的服務器。

誰能告訴我如何連接 java 以及如何發送字符串? 建議它也適用於 Android

我在 python 中的服務器:

import socket, time

soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.bind(("160.07.08.49", 6784))

soc.listen(5)
(client, (ipNum, portNum)) = soc.accept()

while True:
    print(client.recv(1024))
    time.sleep(0.5)

我在 Java 的客戶:

        try {
            Socket socket = new Socket("160.07.08.49", 6784);

            PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
            printWriter.write("Hello from java");
            printWriter.flush();
            printWriter.close();
        }catch (Exception e) {e.printStackTrace();}

當 Java 客戶端連接時,我從 python 收到錯誤

    print(soc.recv(20))
A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied

Python 回顯服務器:

import socket

HOST = 'localhost'
PORT = 6784

while True:
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((HOST, PORT))
        s.listen()
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            while True:
                data = conn.recv(1024)
                if not data:
                    break
                conn.sendall(data)

Java客戶端:

import java.io.*;
import java.net.Socket;

public class JavaClient {

   public static void main(String [] args) {
      String serverName = "localhost";
      int port = 6784;

      try {
         Socket client = new Socket(serverName, port);
         
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out = new DataOutputStream(outToServer);
         
         out.writeUTF("Hello from " + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in = new DataInputStream(inFromServer);
         
         System.out.println("Server says " + in.readUTF());
         client.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

最大的區別是我正在做localhostlocalhost 如果您需要從 localhost 外部獲得 Python 服務器,請將bind行更改為:

soc.bind(("0.0.0.0", 6784))

這樣服務器就會監聽所有可用的接口。 然后讓您的 Java 客戶端連接到服務器的外部 IP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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