java用ServerSocket類結合io流實現一對一聊天(java實現簡單的TCP聊天程式只能用telnet連線後方可使用)
阿新 • • 發佈:2019-02-13
粗略寫了點程式碼,其實這種在流的實現方式裡面可以用好多種不同流方面的類,我這沒用最簡單的,而是那邊弄個流這邊弄個流,好讓自己熟悉不同流的類,希望大家別繞暈哈。可能對新手會有點繞,不過久了應該就會了,程式碼不唯一,功能達到了就行了,由於時間關係我就沒怎麼去優化了,程式碼如下:
本程式碼是先從服務端向客戶端傳送訊息,然後客戶端再向服務端傳送,若有一方不回覆則不能繼續聊天。這是一個簡單的類似TCP的聊天程式。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerSocketDemo {
//一對一發訊息
public static void test3(){
//服務端
System.out.println("等待連線中。。。");
ServerSocket ss;
try {
ss = new ServerSocket(6666);
while(true){
Socket a = ss.accept();
System.out.println(a.getInetAddress()+" 已連線成功!");
OutputStream os = a.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("歡迎來到"+"\r\n");
pw.write("小詢聊天世界"+"\r\n");
pw.flush();
//一對一互相傳送資料 服務端先發送訊息 若有一方不回覆則不能繼續聊天
Scanner scanner = new Scanner(System.in);
String wl = null;
InputStream is = a.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while (scanner.hasNextLine()) {
String str = scanner.nextLine();
pw.println("服務端:"+str);
System.out.println("我:"+str);
pw.flush();
String clien = br.readLine();
System.out.println("客戶端:"+clien);
pw.println("我:"+clien); pw.flush();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
test3();
}
}
執行該程式碼後可通過兩個dos控制檯視窗進行聊天,通過telnet IP地址 埠號 命令如 telnet localhost 6666,我是用eclipse作為伺服器端和SecureCRT作為客戶端進行聊天的。程式碼演示如下圖執行程式碼後在eclipse顯示如圖:
連線CRT後兩邊的控制檯顯示如下圖:
在伺服器端輸入聊天內容(您好!我是小詢。很高興認識你。。)回車效果如下圖:
在客戶端輸入內容(我也很高興認識你。哈哈),效果如下:
可以一直聊下去。。。嘿嘿。。