怎样实现socket网络编程的多线程

发布时间:2021-02-04 14:50:06 作者:小新
来源:亿速云 阅读:192

这篇文章给大家分享的是有关怎样实现socket网络编程的多线程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

怎样实现socket网络编程的多线程,分享给大家

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

}

感谢各位的阅读!关于“怎样实现socket网络编程的多线程”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. socket网络编程之TCP、UDP
  2. unix socket网络编程TCP简单例子

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

socket 多线程 tcp

上一篇:redis中热key问题的解决方法

下一篇:Django防止定时任务并发的案例

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》