如何实现socket网络编程的多线程
更新时间:2020年4月25日 17:25 点击:2366
本文主要介绍了如何实现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(); }//接收数据 } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞
下一篇: Opencv实现对象提取与测量
相关文章
C# WinForm多线程解决界面卡死问题的完美解决方案,使用BeginInvoke
问题描述:当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面卡死的现像,最好的方法就是多线程来解决一个主线程来创建界...2020-06-24- 这篇文章主要介绍了c# 多线程处理多个数据的方法,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...2021-03-31
- 这篇文章主要介绍了C#基于委托实现多线程之间操作的方法,实例分析了C#的委托机制与多线程交互操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Springboot+TCP监听服务器搭建过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-28
- 这篇文章主要介绍了c# socket网络编程,server端接收,client端发送数据,大家参考使用吧...2020-06-25
- 这篇文章主要介绍了C#多线程中的异常处理操作,涉及C#多线程及异常的捕获、处理等相关操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C#实现Socket通信的解决方法,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了JS WebSocket断开原因和心跳机制,对websocket感兴趣的同学,可以参考下...2021-05-08
- 这篇文章主要介绍了C#中异步和多线程的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2021-01-16
- 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别...2020-06-25
- 本篇文章主要介绍了C# Socket异步通信,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要为大家详细介绍了C#多线程之Thread类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 在Java中,我们可以利用多线程来最大化地压榨CPU多核计算的能力,下面这篇文章主要给大家介绍了关于java中多线程与线程池基本使用的相关资料,需要的朋友可以参考下...2021-09-13
- 本篇文章主要介绍了C# Socket的TCP通讯,socket通讯方式有两种:同步和异步,详细的介绍了这两种方法,有兴趣的可以了解一下。...2020-06-25
python使用socket高效传输视频数据帧(连续发送图片)
本文主要介绍了python使用socket高效传输视频数据帧(连续发送图片),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-23- 我们在调试过程使用的工具有:modheader,postman等,但这些工具都会存在的问题:缺少客户端里相应的设备信息;即使将cookie信息复制出来,也是存在过期的问题;多个设备之间切换时不方便;针对这些存在的问题,我基于websocket双向通信的特点,实现了多端桥接管理平台...2021-05-15
- 第一种解决方案的原理是:将线程执行的方法和参数都封装到一个类里面。通过实例化该类,方法就可以调用属性来实现间接的类型安全地传递多个参数...2020-06-25
- 这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C#基于TCP协议的服务器端和客户端通信编程的基础教程,文中讲解了C#中TCP编程主要相关的TcpListener类与TcpClient类用法,需要的朋友可以参考下...2020-06-25
- 在本篇文章里小编给大家整理的是一篇关于java多线程中执行多个程序的实例分析内容,有需要的朋友们可以学习参考下。...2021-02-07