客户端/服务器JVM_Bind异常

时间:2016-05-22 03:52:12

标签: java python networking client-server

我正在尝试在 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()

我得到了:

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

我不明白为什么我不能运行多个程序实例? 是因为我使用的是同一个端口吗? 但是之前我只使用套接字而不是SSLsocket就可以了。

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

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

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

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