熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

socket 線程 思路 java

2013-11-23 19:04:30  來源: Java核心技術 

  網上參考別人的例子改自己的程序終於搞明白了原來在socket的服務器端設置線程並不是像之前想的那樣建立一個連接後就重新開一個端口去監聽這樣的想法遇到了很多問題首先當我把客戶端弄成for循環遞增的鏈接個格端口的時候發現總是異常因為服務器端的新的端口建立速度總是沒有客戶端的主動連接塊然後試圖去讓客戶端創建新端口鏈接的速度降慢但是一直沒調試成功並且即便是成功了這個問題還是有隱患的因為客戶端的鏈接速度是不可控的有兩天這個問題沒有進展後來在網上查到了原來服務器端的線程並不是用來創建新的端口的之前也想過一個服務器端不可能就連接一個客戶端但是沒想出來解決辦法看了例子的提示後才做出來服務器端的線程是用來監聽連接客戶端的當監聽到客戶端的連接請求時就會主動去創建一個socket線程去連接完成客戶端和服務器端的交互後客戶端自動斷開鏈接

  核心代碼

  Main 函數

  ServerSocket serverSocket=null

  boolean listening=true

  try{

  serverSocket=new ServerSocket(

  //創建一個ServerSocket在端口監聽客戶請求

  }catch(IOException e) {  }

  while(listening){ //永遠循環監聽

  newServerThread(serverSocketaccept()clientnum)start()

  //監聽到客戶請求根據得到的Socket對象和

  客戶計數創建服務線程並啟動之

  clientnum++ //增加客戶計數

  }

  serverSocketclose() //關閉ServerSocket

  設計ServerThread類

  public class ServerThread extends Thread{

  Socket socket=null //保存與本線程相關的Socket對象

  int clientnum //保存本進程的客戶計數

  public ServerThread(Socket socketint num) { //構造函數

  thissocket=socket //初始化socket變量

  clientnum=num+ //初始化clientnum變量

  }

  public void run() { //線程主體

  try{//在這裡實現數據的接受和發送

  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26230.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.