热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何实现socket网络编程的多线程

首先,学好计算机网络知识真的很重要。虽然,学不好不会影响理解下面这个关于宏观讲解,但是,学好了可以自己打渔吃,学不好就只能知道眼前有鱼吃却打不到渔。在Java中网络程序有2种协议:TCP和UDP,下面可以和小编一起学习下

本文主要介绍了如何实现socket网络编程的多线程,分享给大家

TCP 、UDP、IP地址的基本介绍:

  • TCP

是可靠的连接。这个可靠的意思就是得有明确的连接对象才行,就像是打电话,拨打的号码必须得在服务中有人接,这个网络会话才算是建立了。

  • UDP:

不可靠的连接。不可靠的意思就是不太确定这个会话最后是不是真的送达你要连接的对象那里去了,就像是寄快递,把快递地址填上了,但是说不好半路会出点啥幺蛾子,能不能安全送达不一定。

  • IP地址:

就是计算机的身份证。身份证号前六位数字是地址码(可以知道是哪个省哪个城市哪个县城),接着八位数字是出生日期码,IP地址也是这样的,它是由网络地址(确定是哪个网络)和主机地址(网络中的哪个主机)组成的。

本机地址: localhost等价于 127.0.0.1

下面的例子是基于TCP协议进行的。

public class Client {
 public static void main(String[] args) throws Exception{

  //打开一个套接字,准备发送请求
  Socket socket = new Socket("localhost", 9996);//得先建立连接,就是所谓的TCP是建立可靠的连接

  System.out.println("尊敬的VIP客户,请求数据小分队已准备好,请输入您的请求:");

  //向服务端发送带着客户端请求的数据,这个请求数据是从键盘读入的,发送给服务端是以PrintWriter的形式包装
  PrintWriter out =new PrintWriter(socket.getOutputStream(),true);

  //输入流getInputStream(),单独开一个线程在Receive类中完成接收服务器发来的数据
  Thread t = new Thread(new Receive(socket));
  t.start();

  Scanner scanner =new Scanner(System.in);//键盘输入
  while(scanner.hasNextLine()){
   out.println(scanner.nextLine());//将从键盘输入的数据发送出去
  }

 }
}

public class Receive implements Runnable {
 private Socket socket;
 public Receive(Socket socket) {
  this.socket=socket;
 }

 @Override
 public void run() {
  try {
   Scanner scanner =new Scanner(socket.getInputStream());//接收数据
   String str =null;
   while(true){
    str=scanner.nextLine();
    System.out.println("服务器说:"+str);//打印接收的数据
   }
  } catch (IOException e) {
   e.printStackTrace();
  }

 }

}
public class Server {
 public static void main(String[] args) throws Exception{

  ServerSocket server = new ServerSocket(9996);//在端口9996开一个服务,监听客户端发来的请求,准备接收客户端发来的请求数据

  System.out.println("服务端准备完毕,随时待命接收请求!");

  Socket socket =server.accept();//只有当有客户端请求并连接时,才回返回一个Socket对象,这个对象就是带着客户端请求的那个Socket对象


  //创建一个PrintWriter的实例对象out来完成服务端向客户端的输出数据的任务,
  PrintWriter out = new PrintWriter(socket.getOutputStream(),true);

  //单独开一个线程接收从客户端过来的请求,在Receive1类中完成数据的接收
  Thread t = new Thread(new Receive1(socket));
  t.start();

  /*一定要理解Socket是一个用于机器之间通信的类*/

  //发送数据给客户端
  Scanner scanner = new Scanner(System.in);//键盘输入服务端要发给客户端的数据
  while(scanner.hasNextLine()){
   out.println(scanner.nextLine());//将键盘输入的服务端要发给客户端的数据封装在PrintWriter类的对象中
  }
 }
}
public class Receive1 implements Runnable {
 private Socket socket;
 public Receive1(Socket socket) {
  this.socket=socket;//在服务端接收客户端发来的数据需要调用Receive1()这个方法,就会得到一个Socket对象,这个对象就是携带着客户端请求的socket
 }

 @Override
 public void run() {
  try {
   Scanner scanner=new Scanner(socket.getInputStream());//获得客户端从键盘接收的输入流
   String str = null;
   while(true){
    str=scanner.nextLine();
    System.out.println("客户端发来的数据:"+str);
   }
  } catch (IOException e) {
   e.printStackTrace();
  }//接收数据
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持


推荐阅读
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • UDP千兆以太网FPGA_verilog实现(四、代码前期准备UDP和IP协议构建)
    UDP:userDatagramprotocol用户数据报协议无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC76 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了在CentOS 7.x上进行端口映射配置的方法,通过修改内核和配置防火墙实现端口映射。作者分享了自己使用华为服务器进行端口映射的经验,发现网速比直连还快且稳定。详细的配置过程包括开启系统路由模式功能、设置IP地址伪装、设置端口映射等。同时,还介绍了如何监听本地端口的tcp请求,以及删除规则和开放的端口的方法。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • Ansem 最新雄文:软着陆后,加密市场下阶段趋势与核心叙事
    市场最糟糕的时候已经过去,以太坊合并前不太会看到新的低点;但仍需来自关注宏观市场的不确定风险。撰文:Ansem ... [详细]
  • IP、ARP、TCP、UDP、ICMP、DNS、路由协议、DHCP协议的缺陷,容易受到的攻击,以及防御措施1、IP协议1.1、介绍: ... [详细]
author-avatar
tlgcc
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有