TCP通信,保姆级详讲,含6个练习,看完就会

阅读: 评论:0

TCP通信,保姆级详讲,含6个练习,看完就会

TCP通信,保姆级详讲,含6个练习,看完就会

TCP通信协议

  • TCP是一种可靠的网络协议,它在通信的两端各建一个Socket对象,从而在通信的两端形成网络通信链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
  • Java对基于TCP协议的网络提供了良好的封装,使用Socket对象代表两端的通信端口,并通过Socket产生的IO流进行网络通信
  • Java为客户端提供了Socket类,为服务端提供了SeveerSocket类

TCP发送数据

  • 创建客户端的Socket对象
  • 获取输出流写数据
  • 释放资源
//		创建Socket对象,这里第一个参数可以是主机IP地址的字符串,底层会帮我们自动处理,第二个参数还是端口号Socket socket = new Socket("10.5.219.110",42789);//     OutputStream  getOutputStream()通过此方法可以获取输出流写数据OutputStream outputStream = OutputStream();outputStream.write("hello,tcp,俺老孙来也".getBytes());
//		最后释放资源socket.close();

TCP接收数据

  • 创建服务器端的Socket对象(SeverSocket)
  • 获得输入流读数据,并把数据显示在控制台
  • 释放资源
//SeverSocket创建对象,参数为端口号ServerSocket serverSocket = new ServerSocket(42789);
//因为SeverSocket类中没有getInputStream()方法,但是有返回倾听到此套接字的accept()方法
//监听客户端连接,返回Socket()对象Socket accept = serverSocket.accept();
//通过InputStream()方式可以获取输入流InputStream inputStream = InputStream();byte[] bytes = new byte[1024];int len&#ad(bytes);System.out.println("接受的数据是 :"+new String(bytes,0,len));

TCP通信程序练习

练习一

  • 客户端:发送数据,接收服务器反馈
  • 服务端:接收数据,给出反馈
客户端
  • 先写后接受反馈
        Socket socket = new Socket("10.5.219.110",42789);OutputStream outputStream = OutputStream();outputStream.write("hello啊,TCP,俺老孙现在来找你啦!".getBytes());//接收服务器反馈InputStream inputStream = InputStream();byte[] bytes = new byte[1024];System.out.println("客户端 :"+new String(bytes,ad(bytes)));socket.close();
服务器端
  • 先接受数据,后给出反馈
        ServerSocket serverSocket = new ServerSocket(42789);Socket accept = serverSocket.accept();InputStream inputStream = InputStream();byte[] bytes = new byte[1024];int len&#ad(bytes);System.out.println("服务器 :"+new String(bytes,0,len));//给出反馈OutputStream outputStream = OutputStream();outputStream.write("数据已收到".getBytes());

练习二

  • 客户端数据来源于键盘录入
客户端
public class InetAddressDemo {public static void main(String[] args) throws IOException {Socket socket = new Socket("10.5.219.110",42789);BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));//封装输出流对象BufferedWriter bufferedWriter = new BufferedWriter(new OutputStream()));String line;while((line&#adLine())!=null){if("886".equals(line)){break;}bufferedWriter.write(line);wLine();bufferedWriter.flush();}socket.close();}
}
接收端
public class ReceiveDemo {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(42789);Socket accept = serverSocket.accept();BufferedReader br = new BufferedReader(new InputStream()));String line;while ((line&#adLine())!=null){System.out.println(line);}serverSocket.close();}
}

练习三

  • 客户端:数据来自于键盘录入,知道输入的数据是886,发送数据结束
  • 服务器端:接收到的数据写入文本文件
客户端
//客户端源码和练习二的一摸一样,这里不重复写
接收端
public class ReceiveDemo {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(42789);Socket s = ss.accept();BufferedReader br = new BufferedReader(new InputStream()));BufferedWriter bw = new BufferedWriter(new FileWriter("D:\de\File\"));String line;while ((line&#adLine())!=null){bw.write(line);bw.newLine();bw.flush();}bw.close();ss.close();}
}

练习四

  • 客户端:数据来自于文本文件
  • 服务器端:接收到的数据写入文本文件
客户端
        Socket ss = new Socket("10.5.219.110",42789);BufferedReader br = new BufferedReader(new FileReader("D:\de\File\"));BufferedWriter bw = new BufferedWriter(new OutputStream()));String line;while ((line&#adLine())!=null){bw.write(line);bw.newLine();bw.flush();}ss.close();br.close();
服务器端
//这里的服务器端和练习三的一摸一样,这里不再重复

练习五

  • 客户端:数据来自于文本文件,接收服务器反馈
  • 服务器端:收到的数据写入文本文件,给出反馈
客户端
        Socket ss = new Socket("10.5.219.110",42789);BufferedReader br = new BufferedReader(new FileReader("D:\de\File\"));BufferedWriter bw = new BufferedWriter(new OutputStream()));String line;while ((line&#adLine())!=null){bw.write(line);bw.newLine();bw.flush();}//给出信息结束标志ss.shutdownOutput();//接受反馈BufferedReader bfr = new BufferedReader(new InputStream()));System.out.println("客户端 :"&#adLine());ss.close();br.close();
服务器端
  ServerSocket ss = new ServerSocket(42789);Socket s = ss.accept();BufferedReader br = new BufferedReader(new InputStream()));BufferedWriter bw = new BufferedWriter(new FileWriter("D:\de\File\Cx.txt"));String line;while ((line&#adLine())!=null){bw.write(line);bw.newLine();bw.flush();}//给出反馈BufferedWriter bfw = new BufferedWriter(new OutputStream()));bfw.write("数据上传成功");wLine();bfw.flush();bw.close();ss.close();

练习六

  • 客户端:数据来自文本文件,接收服务器反馈
  • 服务器端:收到的数据写入文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程
客户端
//代码同练习五,这里不再重复代码
服务器端
public class ReceiveDemo {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(42789);while (true){Socket s = ss.accept();new Thread(new ServerThread(s)).start();}}
}
线程类
public class ServerThread implements Runnable {private Socket s;public ServerThread(Socket s) {this.s = s;}@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStream()));int count=0;File file = new File("D:\de\File\Cx[" + count + "].txt");while (ists()) {count++;file = new File("D:\de\File\Cx[" + count + "].txt");}BufferedWriter bw = new BufferedWriter(new FileWriter(file));String line;while ((line = br.readLine()) != null){bw.write(line);bw.newLine();bw.flush();}BufferedWriter bfw=new BufferedWriter(new OutputStream()));bfw.write("数据上传成功");wLine();bfw.flush();s.close();}catch (IOException e){e.printStackTrace();}}
}

本文发布于:2024-01-31 14:38:48,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170668312829240.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:就会   看完   保姆   通信   TCP
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23