(一)TCP編程-線程客戶端與服務端的交流

客戶端開啓線程:
import java.io.IOException;
import java.net.Socket;
/*
 * 一個客戶端與一個服務端進行聊天。
 * 1:接收數據,
 * 2:發送數據。
 * 同時進行。:線程。 一個線程負責接收數據,一個線程負責發送數據。
 */
public class ChatClient {
public static void main(String[] args) {
       try {
Socket socket=new Socket("127.0.0.1", 8888);
SendThread sendThread=new SendThread(socket);//實現run接口的寫法
new Thread(sendThread).start();//實現run接口的寫法
new ReveicerTread(socket).start();//繼承run的寫法第一種
//ReveicerTread t=new ReveicerTread(socket);//繼承run的寫法第二種種
//t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服務端開啓線程:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatServer {
public static void main(String[] args) {
      try {
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=serverSocket.accept();
SendThread sendThread=new SendThread(socket);//實現run接口的寫法
new Thread(sendThread).start();//實現run接口的寫法
new ReveicerTread(socket).start();//繼承run的寫法第一種
//ReveicerTread t=new ReveicerTread(socket);//繼承run的寫法第二種種
//t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客戶端線程:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class SendThread implements Runnable {
    //建立一個構造函數用來接收socket
private Socket socket;
public SendThread(Socket socket) {
this.socket=socket;
}
OutputStream os=null;
Scanner sc=new Scanner(System.in);
public void run() {
//1.套接字直接傳進來,不用建立
//2.得到輸出管道
//run是父類方法,不能在拋出異常,由於子類異常要小於父類異常,而修飾符則是要大於等於父類
try {
os=socket.getOutputStream();
String str=null;
while(true){
str=sc.next();
if("886".equals(str)){
break;
}
os.write(str.getBytes());
os.write("\r\n".getBytes());
}
} catch (IOException e) {
e.printStackTrace();
}
try {
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服務端線程:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReveicerTread extends Thread {
   //建立一個構造函數用來接收socket
private Socket socket;
public ReveicerTread(Socket socket){
this.socket=socket;
}
     @Override
     public void run() {
     try {
InputStream is=socket.getInputStream();
String ip=socket.getInetAddress().getHostAddress();
int port=socket.getPort();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
int len=-1;
String str=null;
while(true){
str=br.readLine();
if(str==null||"886".equals(str)||"\r".equals(str)||socket==null){
break;
}
System.out.println("發送ip: "+ip+"-端口 "+port+":"+str);
}
} catch (IOException e) {
e.printStackTrace();
}
    // is.close();
//br.close();
//socket.close();
   }
}
相關文章
相關標籤/搜索