基于TCP协议实现两人随意聊天的案例,结合了之前学习的多线程、字节流缓冲流等知识,实现两个人随机发送接收消息n条,一下代码是我在eclipse中写的,附带窗口运行概况。还有一些不足之处,比如发送接收的消息前面应该显示是谁发的,以及发送的时间,这些没来得及增加上去,多多包涵。
两人随意聊天——采用TCP协议
A端:
1 package 两人聊天TCP_demo8_chitchat_;
2 //接收端
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.io.InputStreamReader;
8 import java.io.OutputStream;
9 import java.io.OutputStreamWriter;
10 import java.io.PrintWriter;
11 import java.net.InetAddress;
12 import java.net.ServerSocket;
13 import java.net.Socket;
14 import java.sql.Date;
15 import java.text.SimpleDateFormat;
16 import java.util.Scanner;
17
18 public class SesrverDemo {
19 public static void main(String[] args) throws IOException {
20 // TODO Auto-generated method stub
21 ServerSocketss=new ServerSocket(6666);
22 System.out.println("聊天中");
23 Sockets = ss.accept();
24 InetAddressaddress = s.getInetAddress();
25 InputStreamis = s.getInputStream();
26 //线程一:接收数据
27 new Thread(){
28 public void run() {
29 while(true) {
30 try {
31 //创建输入缓冲流对象
32 BufferedReaderbr=new BufferedReader(new InputStreamReader(is));
33 Stringstr=br.readLine();
34 if(str.equals("886"))
35 {
36 System.exit(0);
37 }
38 System.out.println("sender--》"+address);
39 System.out.println(str);
40 }catch (IOException e) {
41 // TODO Auto-generated catch block
42 e.printStackTrace();
43 }
44 }
45 }
46 }.start();
47 //线程二:发出数据
48 new Thread(){
49 public void run() {
50 while(true) {
51 OutputStreamos=null;
52 try {
53 os= s.getOutputStream();
54 }catch (IOException e) {
55 // TODO Auto-generated catch block
56 e.printStackTrace();
57 }
58 //写出数据
59 PrintWriterpw=new PrintWriter(os,true);
60 Stringstr=(new Scanner(System.in)).nextLine();
61 pw.println(str);
62 //通过接收或输入“886”来结束程序
63 if(str.equals("886")) {
64 System.exit(0);
65 }
66 }
67 }
68 }.start();
69 }
70
B端:
1 package 两人聊天TCP_demo8_chitchat_;
2 import java.io.BufferedReader;
3 /*发送端*/
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.OutputStream;
7 import java.io.OutputStreamWriter;
8 import java.io.PrintWriter;
9 import java.io.InputStream;
10 import java.io.InputStreamReader;
11 import java.net.InetAddress;
12 import java.net.Socket;
13 import java.net.UnknownHostException;
14 import java.util.Scanner;
15
16
17 public class ClientDemo {
18
19 public static void main(String[] args) throwsUnknownHostException, IOException {
20 // TODO Auto-generated method stub
21 System.out.println("聊天中");
22 Sockets=new Socket(InetAddress.getByName("DESKTOP-H6AT49C"),6666);
23 OutputStreamos = s.getOutputStream();
24 PrintWriterpw=new PrintWriter(os,true);
25 //线程一:发出数据
26 new Thread(){
27 public void run() {
28 while(true) {
29 //发出数据
30 Stringstr=(new Scanner(System.in)).nextLine();
31 //写出数据
32 pw.println(str);
33 if(str.equals("886")) {
34 System.exit(0);
35 }
36 }
37 }
38 }.start();
39
40 //线程二:接收数据
41 InputStreamis=s.getInputStream();
42 new Thread(){
43 public void run() {
44 while(true) {
45
46 BufferedReaderbr=new BufferedReader(new InputStreamReader(is));
47 Stringstr=null;
48 try {
49 //读数据
50 str= br.readLine();
51 if(str.equals("886")) {
52 System.exit(0);
53 }
54 System.out.println("sender-->"+InetAddress.getByName("DESKTOP-H6AT49C"));
55 }catch (UnknownHostException e) {
56 e.printStackTrace();
57 }catch (IOException e) {
58 e.printStackTrace();
59 }
60 //打印读到的数据
61 System.out.println(str);
62 }
63 }
64 }.start();
65 // s.close();
66 }
67
程序运行情况:
1 聊天中
2 你好,我是Alice!
3 sender--》/192.168.94.57
4 你好呀,我是Bob,很高兴认识你。
5 sender--》/192.168.94.57
6 你来自哪里呢?
7 我来自广州,在这边读书。
8 好像你是一名老师
9 你教什么呢?
10 sender--》/192.168.94.57
11 我教英语的,在一个高中,很高兴认识你。
12 我也很高兴认识你,但是我要上课了,所以,我们下次再聊吧
13 sender--
B端:
1 聊天中
2 sender-->DESKTOP-H6AT49C/192.168.94.57
3 你好,我是Alice!
4 你好呀,我是Bob,很高兴认识你。
5 你来自哪里呢?
6 sender-->DESKTOP-H6AT49C/192.168.94.57
7 我来自广州,在这边读书。
8 sender-->DESKTOP-H6AT49C/192.168.94.57
9 好像你是一名老师
10 sender-->DESKTOP-H6AT49C/192.168.94.57
11 你教什么呢?
12 我教英语的,在一个高中,很高兴认识你。
13 sender-->DESKTOP-H6AT49C/192.168.94.57
14 我也很高兴认识你,但是我要上课了,所以,我们下次再聊吧
我是用Onenote做的学习笔记,代码为什么前面会有序号,是因为我用了Onenote里面的NoteHighlight插件,可以直接将java的代码进行格式化保存在我的Onenote笔记中,提高可读性。