多線程和Socket套接字


一個進程可以有多個線程
一個線程至少會有一個進程

extends Thread類
implements Runnable接口
重寫run()方法

啟動線程start():1.啟動一個線程 2.調用run()方法

區別:
繼承Thread類 資源不共享
實現Runnable接口 資源共享 還可以繼承其他類

創建對象時
繼承Thread類 直接new對象
實現Runnable接口 new Thread(構造參數:Runnable接口實現類對象);

--------------------------------------
Socket:套接字
java.net包

流式套接字:基於TCP協議的Socket網絡編程

---服務端(main方法):
ServerSocket serverSocket = new ServerSocket(5000); //創建服務端socket 5000端口
Socket socket = serverSocket.accept(); //等待通信
InputStream is = socket.getInputStream(); //得到輸入流
BufferedReader br = new BufferedReader(new InputStreamReader(is)); //把輸入流封裝成緩沖字符輸入流
String info;
while((info=br.readLine())!=null){
System.out.println(info);
}

OutputStream os = socket.getOutputStream();
String info = "服務端的消息";
byte[] infos = info.getBytes();
os.write(infos);

os.close();
br.close();
is.close();
socket.close();
serverSocket.close();


---客戶端(main方法):
Socket socket = new Socket("localhost",); //客戶端 參數1:連接到ip 本機localhost 參數2:服務端端口5000
OutputStream os = socket.getOutputStream(); //得到輸出流
String info = "客戶端的消息";
byte[] infos = info.getBytes();
os.write(infos);

socket.shutdownOutput(); //socket輸出完了要關閉

InputStream is = socket.getInputStream(); //得到輸入流
BufferedReader br = new BufferedReader(new InputStreamReader(is)); //把輸入流包裝成緩沖字符輸入流
String temp;
while((temp = br.readLine())!=null){
System.out.println(temp);
}

br.close();
is.close();
os.close();
socket.close();

 

//如果傳的是對象 首先user類需要實現序列化 public class User implements Serializable
客戶端
new user對象...
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.write(user);

oos.close();

服務端
ObjectInputStream ois = new ObjectInputStream(is);
User user = (User)ois.readObject();
System.out.println(user.getUserName());

ois.close();


數據包式套接字:基於UDP協議的Socket網絡編程

 


=====================多線程==============

對應每個客戶請求 都要創建一個相應的線程

//線程類
public class LoginThread extends Thread{
private Socket socket;

public LoginTread(Socket socket){
this.socket = socket;
}

//處理客戶端請求
public void run(){
InputStream is = socket.getInputStream(); //得到輸入流
ObjectInputStream ois = new ObjectInputStream(is);
User user = (User)ois.readObject();
System.out.println(user.getUserName());

OutputStream os = socket.getOutputStream();
String info = "服務端的消息";
byte[] infos = info.getBytes();
os.write(infos);

os.close();
ois.close();
is.close();
socket.close();

}

}


//服務端

---服務端(main方法):
ServerSocket serverSocket = new ServerSocket(5000); //創建服務端socket 5000端口
while(true){ //無限循環等待客戶的請求
Socket socket = serverSocket.accept(); //等待通信
LoginThread loginTread = new LoginThread(socket); //把每個客戶socket傳入新線程
loginThread.start(); //開啟線程

}

 

-----------

得到客戶端ip

InetAddress address = socket.getInetAddress();
String ip = address.getHostAddress();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM