Java線程的方式實現TCP通信的小案例

package cn.wlt.chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
*服務器端
*/
public class TCPServer {
//端口
private int port;

public TCPServer(int port) {
    super();
    this.port = port;
    Recevice r=new Recevice();
    //創建線程
    Thread t= new Thread(r);
    //啓動線程
    t.start();
}

class Recevice implements Runnable{

    @Override
    public void run() {
        ServerSocket ss=null;
        Socket s=null;
        BufferedReader br=null;
        try {
            //創建服務器端的服務套接字 Socket
            ss=new ServerSocket(port);
            System.out.println("服務器已經啓動...");
            //接收Socket
            s = ss.accept();
            //獲得客戶端的IP
            InetAddress ia = s.getInetAddress();
            //獲得輸入流
            InputStream in = s.getInputStream();
            //字節流轉換城字符流
            br=new BufferedReader(new InputStreamReader(in));
            String line=null;
            while((line=br.readLine())!=null){
                if("exit".equals(line)){
                    System.out.println("歡迎使用...");
                    break;
                }
                System.out.println(ia.getHostAddress()+"說:"+line);
            }
            System.out.println("sssss");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {

                try {
                    if(br!=null)
                    br.close();
                    if(s!=null)
                    s.close();
                    if(ss!=null)
                    ss.close();

                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
}
    public static void main(String[] args) {
        new TCPServer(10000);
    }

}


package cn.wlt.chat;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
*客戶端 測試的時候開啓兩個eclipse就可以啦
*/
public class TCPClient {
private String ip;
private int port;

public TCPClient(String ip, int port) {
    super();
    this.ip = ip;
    this.port = port;
    Sender s=new Sender();
    Thread t=new Thread(s);
    t.start();
}

class Sender implements Runnable {

    @Override
    public void run() {
        Socket s = null;
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            s = new Socket(ip, port);
            // 從控制檯輸入
            br = new BufferedReader(new InputStreamReader(System.in));
            // 獲得輸出通道
            OutputStream out = s.getOutputStream();
            // 創建輸出流
            bw = new BufferedWriter(new OutputStreamWriter(out));
            String line = null;
            while ((line = br.readLine()) != null) {
                if ("exit".equals(line)) {
                    System.out.println("歡迎使用...");
                    break;
                }
                System.out.println("我說:\r\n" + line);
                bw.write(line);
                bw.newLine();
                // 清緩存
                bw.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            try {
                if (bw != null)
                    bw.close();
                if (br != null)
                    br.close();
                if (s != null)
                    s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
public static void main(String[] args) {
    try {
        new TCPClient(InetAddress.getLocalHost().getHostName(), 20000);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章