2016-05-22 143 views
0

我试图在java服务器和python客户端之间建立SSL连接。客户端/服务器JVM_Bind异常

下面是代码:

服务器端:

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时,它确实很好。

THANKs for any help

+0

请勿张贴本质上只是文本的屏幕截图。复制/粘贴和格式化为代码。 –

回答

0

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

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

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

相关问题