Java基础十八:TCP发送数据、TCP接收数据、TCP通信6个案例练习

7、TCP通信程序

注:java为客户端提供了Socket类,为服务器端提供了ServerSocket类

8、TCP发送数据

TCP发送数据步骤:

1、创建客户端的Socket对象(Socket)

2、获取输出流,写数据

3、释放资源

//TCP发送数据: 需要进行三次握手,所以单独一个发送数据是不会成功的
public class ClientDemo1 {
   public static void main(String[] args) throws IOException {
       //1、创建客户端的Socket对象(Socket)
       //Socket s = new Socket(InetAddress.getByName("192.168.56.1"),10000);
       //socket(String host,int port)创建流套接字并将其连接到指定主机上的指定端口
       Socket s = new Socket("192.168.56.1",10000);
       //2、获取输出流,写数据
       OutputStream os = s.getOutputStream();//返回此套接字的输出流
       os.write("hello".getBytes());
       //3、释放资源
       s.close();
   }
}

9、TCP接收数据

接收数据的步骤:

1、创建服务器端的Socket对象(ServerSocket)

2、获取输入流,读数据,并把数据显示在控制台

3、释放资源

//TCP接收数据
public class ServerDemo2 {
   public static void main(String[] args) throws IOException {
       //1、创建服务器端的Socket对象(ServerSocket)
       ServerSocket ss = new ServerSocket(10009);
       //Socket accept()侦听要连接到此套接字并接受它
       Socket s = ss.accept();
       //2、获取输入流,读数据,并把数据显示在控制台
       InputStream is = s.getInputStream();
       byte[] bys = new byte[1024];
       int len = is.read(bys);
       String data = new String(bys,0,len);
       System.out.println("数据是:"+data);
       //3、释放资源
       s.close();
       ss.close();
   }
}

10、TCP通信练习1

要求:1.客户端:发送数据,接收服务器反馈

2.服务器:接收数据,给出反馈

注:客户端先写数据,后读数据

   服务器端先读数据,后写数据

//客户端:发送数据,接收服务器反馈
public class ClientDemo1 {
   public static void main(String[] args) throws IOException {
       //创建客户端的Socket对象(Socket)
       Socket s = new Socket("192.168.56.1",30000);
       //获取输出流写数据
       OutputStream os = s.getOutputStream();
       os.write("hello beijing".getBytes());
       //接收服务器反馈
       InputStream is = s.getInputStream();
       byte[] bys = new byte[1024];
       int len = is.read(bys);
       String data = new String(bys,0,len);
       System.out.println("客户端:"+data);
       //释放资源
       s.close();
   }
}

 

//服务器:接收数据,给出反馈
public class ServerDemo1 {
   public static void main(String[] args) throws IOException {
       //创建服务器端的Socket对象(ServerSocket)
       ServerSocket ss = new ServerSocket(30000);
       //监听客户端连接,返回一个Socket对象
       Socket s = ss.accept();
       //获取输入流,读数据,并把数据显示在控制台
       InputStream is = s.getInputStream();
       byte[] bys = new byte[1024];
       int len = is.read(bys);
       String data = new java.lang.String(bys,0,len);
       System.out.println("服务器:"+data);
       //给出反馈
       OutputStream os = s.getOutputStream();
       os.write("数据已经收到".getBytes());
       //释放资源
       ss.close();
   }
}

11、 TCP通信练习2

客户端:数据来自于键盘录入,直到输入的数据是886,发送数据结束

服务器:接收到的数据在控制台输出

//客户端
public class ClientDemo1 {
   public static void main(String[] args) throws IOException {
       //创建客户端对象
       Socket s = new Socket("192.168.56.1",40000);
       //数据来自于键盘录入,知道数据的数据是886,发送数据结束
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       //封装输出流对象
       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
       String line;
       while((line=br.readLine())!=null){
           if("886".equals(line)){
               break;
           }
           //获取输出流对象
           bw.write(line);
           bw.newLine();
           bw.flush();
       }
       //释放资源
       s.close();
   }
}

 

//服务器:接收到的数据在控制台输出
public class ServerDemo1 {
   public static void main(String[] args) throws IOException {
       //创建一个服务器对象
       ServerSocket ss = new ServerSocket(40000);
       //客户端监听,返回一个对应的Socket对象
       Socket s = ss.accept();
       BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
       String line;
       while((line=br.readLine())!=null){
           System.out.println(line);
       }
       ss.close();
   }
}

12、TCP通信练习3

客户端:数据来自于键盘录入,直到数据的数据是886,发送数据结束

服务器:接收到的数据写入文本文件

//客户端
public class ClientDemo1 {
   public static void main(String[] args) throws IOException {
       //创建客户端对象
       Socket s = new Socket("192.168.56.1",50000);
       //数据来自于键盘录入,知道数据的数据是886,发送数据结束
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       //封装输出流对象
       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
       String line;
       while((line=br.readLine())!=null){
           if("886".equals(line)){
               break;
           }
           //获取输出流对象
           bw.write(line);
           bw.newLine();
           bw.flush();
       }
       //释放资源
       s.close();
   }
}

//服务器
public class ServerDemo1 {
   public static void main(String[] args) throws IOException {
       //创建服务器对象
       ServerSocket ss = new ServerSocket(50000);
       //监听客户端连接,返回一个对应的Socket对象
       Socket s = ss.accept();
       //接收数据
       BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
       //把数据写入文本文件
       BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\ss.txt"));
       String line;
       while((line=br.readLine())!=null){
           bw.write(line);
           bw.newLine();
           bw.flush();
       }
       bw.close();
       ss.close();
   }
}

13、TCP通信练习4

客户端:数据来于文本文件

服务器:接收到的数据写入文本文件

//客户端
public class ClientDemo1 {
   public static void main(String[] args) throws IOException {
       //创建客户端对象
       Socket s = new Socket("192.168.56.1",60000);
       //封装文本文件的数据
       BufferedReader br  = new BufferedReader(new FileReader("f:\\test\\ss.txt"));
       //封装输出流,写数据
       BufferedWriter bw  = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
       String line;
       while((line=br.readLine())!=null){
           bw.write(line);
           bw.newLine();
           bw.flush();
       }
       br.close();
       s.close();
   }
}

//服务器
public class ServerDemo1 {
       public static void main(String[] args) throws IOException {
           //创建服务器对象
           ServerSocket ss = new ServerSocket(60000);
           //监听客户端连接,返回一个对应的Socket对象
           Socket s = ss.accept();
           //接收数据
          BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
           //把数据写入文本文件
           BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\tt.txt"));
           String line;
           while((line=br.readLine())!=null){
               bw.write(line);
               bw.newLine();
               bw.flush();
           }
           bw.close();
           ss.close();
       }
   }

14、TCP通信练习5

客户端:数据来自于文本文件,接收服务器反馈

服务器:接收到的数据来自于文本文件,给出反馈

客户端结束标记:public  void  shutdownOutput()方法

//客户端
public class ClientDemo1 {
   public static void main(String[] args) throws IOException {
       //创建客户端对象
       Socket s = new Socket("192.168.56.1",50001);
       //封装文本文件的数据
       BufferedReader br  = new BufferedReader(new FileReader("f:\\test\\ss.txt"));
       //封装输出流,写数据
       BufferedWriter bw  = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
       String line;
       while((line=br.readLine())!=null){//等待读取数据
           bw.write(line);
           bw.newLine();
           bw.flush();
       }
       /*自定义结束标记
       bw.write("886");
       bw.newLine();
       bw.flush();*/
       //自动结束标记
      s.shutdownOutput();
       //接收反馈
       BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
       String data = brClient.readLine();
       System.out.println("服务器的反馈:"+data);
       //释放资源
       br.close();
       s.close();
   }
}

//服务器
public class ServerDemo1 {
   public static void main(String[] args) throws IOException {
       //创建服务器对象
       ServerSocket ss = new ServerSocket(50001);
       //监听客户端连接,返回一个对应的Socket对象
       Socket s = ss.accept();
       //接收数据
       BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
       //把数据写入文本文件
       BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\ff.txt"));
       String line;
       while((line=br.readLine())!=null){//等待读取数据
          /* if("886".equals(line)){
               break;
           }*/

           bw.write(line);
           bw.newLine();
           bw.flush();
       }
       //给出反馈
       BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
       bwServer.write("文件上传成功!");
       bwServer.newLine();
       bwServer.flush();
       //释放资源
       bw.close();
       ss.close();
   }
}

15、TCP通信练习6

客户端:数据来自于文本文件,接收服务器反馈

服务器:接收到的数据来自于文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程

//客户端
public class ClientDemo1 {
   public static void main(String[] args) throws IOException {
       //创建客户端对象
       Socket s = new Socket("192.168.56.1",50003);
       //封装文本文件的数据
       BufferedReader br  = new BufferedReader(new FileReader("f:\\test\\ss.txt"));
       //封装输出流,写数据
       BufferedWriter bw  = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
       String line;
       while((line=br.readLine())!=null){//等待读取数据
           bw.write(line);
           bw.newLine();
           bw.flush();
       }
       /*自定义结束标记
       bw.write("886");
       bw.newLine();
       bw.flush();*/

       //自动结束标记
       s.shutdownOutput();

       //接收反馈
       BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
       String data = brClient.readLine();
       System.out.println("服务器的反馈:"+data);
       //释放资源
       br.close();
       s.close();
   }
}

//服务器
public class ServerDemo1 {
   public static void main(String[] args) throws IOException {
       //创建服务器对象
       ServerSocket ss = new ServerSocket(50003);
       //服务器是一直开着的,所以定义成死循环
       while(true) {
           //监听客户端连接,返回一个对应的Socket对象
           Socket s = ss.accept();
           //为每一个客户端开启一个线程
           new Thread(new ServerThrean(s)).start();
       }
   }
}

 

//开启线程类 

public class ServerThrean implements Runnable {
   private  Socket s;
   public ServerThrean(Socket s) {
       this.s = s;
   }

   @Override
   public void run() {
       try {
           //接收数据写入文本文件
           BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
           //这里如果服务器多次写入数据时,都是指向同一个文本文件,会产生冲突
          // BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\ww.txt"));
           //解决名称冲突问题
           int count =0;
           File file = new File("f:\\test\\"+count+".txt");
           while(file.exists()){ //判断名称是否已经存在
               count++; //存在时加1
               file = new File("f:\\test\\ss"+count+".txt");
           }
           BufferedWriter bw = new BufferedWriter(new FileWriter(file));
           String line;
           while((line=br.readLine())!=null){
               bw.write(line);
               bw.newLine();
               bw.flush();
           }
           //给出反馈
           BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
           bwServer.write("上传文本文件成功!");
           bwServer.newLine();
           bwServer.flush();
           //释放资源
           s.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
}

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜀州凯哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值