基于TCP协议实现两人随意聊天——网络编程

    基于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笔记中,提高可读性。

你可能感兴趣的:(Java学习,TCP,网络编程)