热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java网络编程(二)TCP的理解和学习

一、TCP实现发送消息客户端代码:***客户端*publicclassTcpClientDemo{publicstaticvoidmain(String[]ar

一、TCP实现发送消息

客户端代码:

/***客户端*/
public class TcpClientDemo {public static void main(String[] args) {Socket socket = null;OutputStream os = null;//首先得知道服务端的地址和端口号//这里记得异常不要抛出去,捕获起来方便处理try {//服务器地址,用InetAddress来接收InetAddress inetAddress = InetAddress.getByName("127.0.0.1");//端口号int port = 7777;//创建一个套接字链接(socket)socket = new Socket(inetAddress,port);//发送消息的时候要以io流的方式来发送,发送消息肯定是输出流啦os = socket.getOutputStream();//创建Scanner对象,接受从控制台输入Scanner input=new Scanner(System.in);//接受String类型String messge = input.next();//发送消息os.write(messge.getBytes(StandardCharsets.UTF_8));} catch (Exception e) {e.printStackTrace();}finally {//这里是重点!!!千万不要忘记关闭链接和流if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}}}
}

服务端代码:

/***服务端*/
public class TcpServerDemo {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream is = null;ByteArrayOutputStream byteArrayOutputStream = null;//首先建立一个服务端try {//1,ip地址serverSocket = new ServerSocket(7777);while (true) {//2、等待客户端连接socket = serverSocket.accept();//3.消息过来了我们得读取客户消息,接受消息肯定是输入流啦is = socket.getInputStream();//这个时候消息已经接受到了,我们怎么样读取呢?//管道输出流,ByteArrayOutputStreambyteArrayOutputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];//字节数组来接受int length;//长度while ((length = is.read(buffer)) != -1) {byteArrayOutputStream.write(buffer, 0, length);}System.out.println(byteArrayOutputStream.toString());}} catch (Exception e) {e.printStackTrace();}finally {//同样的,得关闭流if (serverSocket != null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if (byteArrayOutputStream != null){try {byteArrayOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}}
}

客户端执行结果:
在这里插入图片描述

服务端接受结果:
在这里插入图片描述
总结: 看代码说话!


  • 客户端

    • 连接服务器Socket
    • 发送消息
  • 服务端

    • 建立服务的端口ServerScoket
    • 等待用户的连接accept
    • 接收用户的消息

二、TCP实现文件上传


  • 客户端代码

/*** 客户端*/
public class TcpUplodeFileClient {public static void main(String[] args) throws Exception{//1、创建一个Socket连接Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 7777);//2、创建一个输出流OutputStream os = socket.getOutputStream();//3、读取文件FileInputStream fis = new FileInputStream(new File("C:\\Users\\大大丁大大\\Desktop\\有用文件\\test.jpg"));//4、写出文件byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) != -1) {os.write(buffer, 0, len);}//通知服务器,我已经结束了socket.shutdownOutput(); //我已经传输完了!//确定服务器接收完毕,才能够断开连接InputStream inputStream = socket.getInputStream();//String byte[]ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer2 = new byte[1024];int len2;while ((len2 = inputStream.read(buffer2)) != -1) {baos.write(buffer2, 0, len2);}System.out.println(baos.toString());//5、关闭资源baos.close();inputStream.close();fis.close();os.close();socket.close();}
}

  • 服务端代码

/*** 服务端*/
public class TcpUplodeFileServer {public static void main(String[] args) throws Exception{//创建服务ServerSocket serverSocket = new ServerSocket(7777);//监听连接Socket socket = serverSocket.accept();//获取输入流InputStream is = socket.getInputStream();//文件输出FileOutputStream fos = new FileOutputStream(new File("test.jpg"));byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer)) != -1){fos.write(buffer,0,len);}//通知客户端接收完毕OutputStream os = socket.getOutputStream();os.write("接收完成".getBytes());//千万记得关闭所有资源serverSocket.close();socket.close();is.close();os.close();}
}

  • 客户端执行结果:
    在这里插入图片描述

  • 服务端执行结果
    在这里插入图片描述
    关于TCP的学习就先到此为止啦~

Java网络编程扩展:Java网络编程学习汇总

路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧**转载请注明出处哦**


推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有