【问题标题】:Client/Server JVM_Bind exception客户端/服务器 JVM_Bind 异常
【发布时间】:2016-05-22 03:52:11
【问题描述】:

我正在尝试在 java 服务器和 python 客户端之间建立 SSL 连接。

代码如下:

服务器端:

public class s implements Runnable {


List<SSLSocket> socketList= new ArrayList<SSLSocket>();
List<File> FileList= new ArrayList<File>();
List<Certificate> CertificateList = new ArrayList<Certificate>();

public static void main(String[] args) {
    s manager = new s();
    new Thread(manager).start();
    Scanner scanner = new Scanner(System.in);

    while(true){
        System.out.printf("Send> ");
        String message = scanner.nextLine();
        if(message.equals("") || message.equals("/n")){
            continue;
        }else{
            manager.send(message);
        }
    }
}

private static SSLServerSocket getServerSocket(int thePort)
    {
        SSLServerSocket s=null;
        try
        {
            String key="G:\\mySrvKeystore";
        char keyStorePass[]="123456".toCharArray();

        char keyPassword[]="123456".toCharArray();
        KeyStore ks= KeyStore.getInstance("JKS");

        ks.load(new FileInputStream(key),keyStorePass);


        KeyManagerFactory kmf= KeyManagerFactory.getInstance("SunX509");

        kmf.init(ks,keyPassword);

        SSLContext sslContext= SSLContext.getInstance("SSLv3");

        sslContext.init(kmf.getKeyManagers(),null,null);


        SSLServerSocketFactory factory=sslContext.getServerSocketFactory();

        s=(SSLServerSocket)factory.createServerSocket(thePort);

    }catch(Exception e)
    {
        System.out.println(e);
    }
    return(s);
}

public void run() {
    try {
        while (true) {
            SSLServerSocket sslserversocket = getServerSocket(**9991**);
            SSLSocket  client = (SSLSocket)sslserversocket.accept();
            socketList.add(client);
            new Thread(new SSocket(client,socketList,FileList)).start();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

客户端:

class timer(threading.Thread):
    def __init__(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.ssl_sock = ssl.wrap_socket(self.sock, ssl_version=ssl.PROTOCOL_SSLv3)
        self.ssl_sock.connect(('localhost',9990))
        self.isrun = True
        threading.Thread.__init__(self);

def run(self): 
    while self.isrun:
        revice =  self.ssl_sock.recv(1024);
        print ("recv> " + revice); 
    self.sock.close();
    self.ssl_sock.close();

def send(self,str):
     self.ssl_sock.send(str + "\n")

def close(self):
    self.isrun=False

if __name__=='__main__':
     main()

我明白了:

我没有使用保留端口,我的操作系统是 windows-7。我先运行服务器,然后再运行客户端。

我不明白为什么我不能运行程序的多个实例? 是因为我使用的是同一个端口吗? 但是之前我只使用socket而不是SSLsocket时没问题。

感谢您的帮助

【问题讨论】:

  • 请勿发布本质上只是文本的屏幕截图。复制/粘贴并格式化为代码。

标签: java python networking client-server


【解决方案1】:

您不能让多个服务器进程监听同一个端口。操作系统如何知道哪一个获得了连接?

处理多个客户端的常用方法是在您接受连接后生成一个线程。您将连接传递给线程和主线程循环,继续侦听并接受新连接。

这都是非常基本的 TCP/IP,与 SSL 无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多