热门标签 | 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();
  }//接收数据
 }

}

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


推荐阅读
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 本文深入探讨了MAC地址与IP地址绑定策略在网络安全中的应用及其潜在风险,同时提供了针对该策略的破解方法和相应的防御措施。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
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社区 版权所有