2016-05-22 212 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無關。

相關問題