基于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 {
19public static void main(String[] args) throws IOException {
20// TODO Auto-generated method stub
21ServerSocketss=new ServerSocket(6666);
22System.out.println("聊天中");
23Sockets = ss.accept();
24InetAddressaddress = s.getInetAddress();
25InputStreamis = s.getInputStream();
26//线程一:接收数据
27new Thread(){
28public void run() {
29while(true) {
30try {
31//创建输入缓冲流对象
32BufferedReaderbr=new BufferedReader(new InputStreamReader(is));
33Stringstr=br.readLine();
34if(str.equals("886"))
35{
36System.exit(0);
37}
38System.out.println("sender--》"+address);
39System.out.println(str);
40}catch (IOException e) {
41// TODO Auto-generated catch block
42e.printStackTrace();
43}
44}
45}
46}.start();
47//线程二:发出数据
48new Thread(){
49public void run() {
50while(true) {
51OutputStreamos=null;
52try {
【Java学习|基于TCP协议实现两人随意聊天——网络编程】53os= s.getOutputStream();
54}catch (IOException e) {
55// TODO Auto-generated catch block
56e.printStackTrace();
57}
58//写出数据
59PrintWriterpw=new PrintWriter(os,true);
60Stringstr=(new Scanner(System.in)).nextLine();
61pw.println(str);
62//通过接收或输入“886”来结束程序
63if(str.equals("886")) {
64System.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
19public static void main(String[] args) throwsUnknownHostException, IOException {
20// TODO Auto-generated method stub
21System.out.println("聊天中");
22Sockets=new Socket(InetAddress.getByName("DESKTOP-H6AT49C"),6666);
23OutputStreamos = s.getOutputStream();
24PrintWriterpw=new PrintWriter(os,true);
25//线程一:发出数据
26new Thread(){
27public void run() {
28while(true) {
29//发出数据
30Stringstr=(new Scanner(System.in)).nextLine();
31//写出数据
32pw.println(str);
33if(str.equals("886")) {
34System.exit(0);
35}
36}
37}
38}.start();
39
40//线程二:接收数据
41InputStreamis=s.getInputStream();
42new Thread(){
43public void run() {
44while(true) {
45
46BufferedReaderbr=new BufferedReader(new InputStreamReader(is));
47Stringstr=null;
48try {
49//读数据
50str= br.readLine();
51if(str.equals("886")) {
52System.exit(0);
53}
54System.out.println("sender-->"+InetAddress.getByName("DESKTOP-H6AT49C"));
55}catch (UnknownHostException e) {
56e.printStackTrace();
57}catch (IOException e) {
58e.printStackTrace();
59}
60//打印读到的数据
61System.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笔记中,提高可读性。
推荐阅读
- JAVA|【Java学习】网络编程全总结——TCP、Udp、多线程、IO流、Socket、简易在线咨询聊天室、Java爬虫
- 网络安全|ARP协议
- Java学习|SpringBoot---杂七杂八---终篇
- Java|Java初学者学习笔记(一)
- C++|C++ 网络套接字编程TCP和UDP实例
- Linux|网络编程套接字(一)
- C++|网络套接字编程
- 计算机网络|计算机网络之IP
- #|有了 IP 地址,为什么还要用 MAC 地址()