`
kidiaoer
  • 浏览: 821922 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

java:多线程与Socket结合的简单示例

阅读更多
java:多线程与Socket结合的简单示例


import java.io.*;
import java.net.*;
public class MyServer {
public static void main(String[] args) throws IOException {
  ServerSocket server = new ServerSocket(5678);
  Socket client = server.accept();
  BufferedReader in = new BufferedReader(new InputStreamReader(client
    .getInputStream()));
  PrintWriter out = new PrintWriter(client.getOutputStream());
  while (true) {
   String str = in.readLine();
   System.out.println(str);
   out.println("has receive...");
   out.flush();
   if (str.equals("end"))
    break;
  }
  client.close();
}
}

import java.net.*;
import java.io.*;
public class Client {
static Socket server;
public static void main(String[] args) throws Exception {
  server = new Socket(InetAddress.getLocalHost(), 5678);
  BufferedReader in = new BufferedReader(new InputStreamReader(server
    .getInputStream()));
  PrintWriter out = new PrintWriter(server.getOutputStream());
  BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
  while (true) {
   String str = wt.readLine();
   out.println(str);
   out.flush();
   if (str.equals("end")) {
    break;
   }
   System.out.println(in.readLine());
  }
  server.close();
}
}
客户机代码则是接受客户键盘输入,并把该信息输出,然后输出"end"用来做退出标识。这个程序只是简单的两台计算机之间的通讯。如果是多个客户同时访问一个服务器呢?你可以试着再运行一个客户端,结果是会抛出异常的。那么多个客户端如何实现呢? 其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身。而服务器通过accept方法就是同意和客户建立通讯。这样当客户建立Socket的同时。服务器

也会使用这一根连线来先后通讯。那么既然如此只要我们存在多条连线就可以了。那么我们的程序可以变为如下:

import java.io.*;
import java.net.*;
public class MyServer {
public static void main(String[] args) throws IOException {
  ServerSocket server = new ServerSocket(5678);
  while (true) {
   Socket client = server.accept();
   BufferedReader in = new BufferedReader(new InputStreamReader(client
     .getInputStream()));
   PrintWriter out = new PrintWriter(client.getOutputStream());
   while (true) {
    String str = in.readLine();
    System.out.println(str);
    out.println("has receive...");
    out.flush();
    if (str.equals("end"))
     break;
   }
   client.close();
  }
}
}
这里仅仅只是加了一个外层的While循环。这个循环的目的就是当一个客户进来就为它分配一个Socket直到这个客户完成一次和服务器的交互,这里也就是接受到客户的"end"消息。那么现在就实现了与多客户之间的交互了。但是问题又来了,这样做虽然解决了多客户,可是是排队执行的。也就是说当一个客户和服务器完成一次通讯之后下一个客户才可以进来和服务器交互。无法做到同时服务。那么要如何才能同时达到既能相

互之间交流又能同时交流呢?很显然这是一个并行执行的问题了。所以线程是最好的解决方案。那么下面的问题是如何使用线程。首先要做的事情是创建线程并使得其可以和网络连线取得联系。然后由线程来执行刚才的操作。要创建线程要么直接继承Thread,要么实现Runnable接口,要建立和Socket的联系只要传递引用就可以了。而要执行线程就必须重写run方法。而run方法所做的事情。就是刚才单线程版本main所做的事情。因此我们的程序变成了这样:

import java.net.*;
import java.io.*;
public class MultiUser extends Thread {
private Socket client;
public MultiUser(Socket c) {
  this.client = c;
}
public void run() {
  try {
   BufferedReader in = new BufferedReader(new InputStreamReader(client
     .getInputStream()));
   PrintWriter out = new PrintWriter(client.getOutputStream());
   // Mutil User but can't parallel
   while (true) {
    String str = in.readLine();
    System.out.println(str);
    out.println("has receive...");
    out.flush();
    if (str.equals("end"))
     break;
   }
   client.close();
  } catch (IOException ex) {
  } finally {

  }
}
public static void main(String[] args) throws IOException {
  ServerSocket server = new ServerSocket(5678);
  while (true) {
   // transfer location change Single User or Multi User
   MultiUser mu = new MultiUser(server.accept());
   mu.start();
  }
}
}
我的类直接从Thread类继承了下来。并且通过构造函数传递引用和客户Socket建立了联系。这样每个线程就有了一个通讯管道。同样我们可以填写run方法。把之前的操作交给线程来完成。这样多客户并行的Socket就建立起来了。
分享到:
评论

相关推荐

    学习笔记:多线程Java Socket编程示例

    总结来说,这个学习笔记提供了一个使用Java Socket编程实现多线程服务器的示例,它演示了如何利用ExecutorService创建线程池来处理并发连接,是理解Java并发编程和网络通信的一个实用案例。虽然这是一个学习笔记,但...

    Java多线程-Socket编程

    Java 多线程-Socket 编程 Java 多线程-Socket 编程是指在 Java 语言中使用多线程技术来实现网络编程,特别是使用 Socket 编程来实现客户端和服务器端的通信。在 Java 中,多线程可以使用 Thread 类和 Runnable 接口...

    多线程Java_Socket编程示例

    本文介绍了一个基于Java的多线程Socket编程示例,通过对服务端实现的分析,我们可以了解到如何利用Java的多线程技术和Socket通信来构建高性能的网络应用程序。这种编程方式特别适合处理大量的并发连接,是构建实时...

    java socket 多线程 简易实现

    Java Socket多线程简易实现是网络编程中的一个基础概念,主要应用于客户端与服务器之间的通信。在Java中,Socket是基于TCP协议的,提供了一种可靠的、面向连接的字节流通信方式。多线程则是Java并发编程的重要特性,...

    java socket 多线程通讯示例

    Java Socket 多线程通信是网络编程中的一个重要概念,它允许两个或多个应用程序通过TCP/IP进行数据交换。在这个示例中,我们创建了一个双向通信的系统,即双工通信,这意味着数据可以在两个方向上同时传输。这样的...

    多线程Java Socket编程示例.doc

    多线程Java Socket编程示例展示了如何在服务器端利用线程池处理多个并发客户端请求。在这个例子中,`sterning.MultiThreadServer` 类创建了一个监听特定端口(默认为8821)的服务器,并使用`ExecutorService`来管理...

    Socket多线程简单示例

    在提供的“多线程Socket简单示例”压缩包中,可能包含了服务端和客户端的源代码,它们展示了如何结合Socket和多线程实现基本的通信功能。你可以通过阅读这些代码来学习如何在实际项目中应用这一技术。 总结起来,...

    java socket 多线程实例

    在这个“Java Socket 多线程实例”中,我们将会探讨如何结合这两个关键概念来创建一个聊天服务器和客户端应用。 首先,`ChatServer.java` 文件通常包含了服务器端的代码。在Java中,通过`java.net.ServerSocket` 类...

    java多线程Socket简单实现

    Java多线程Socket实现是网络编程中的重要概念,它结合了Java的并发处理能力和Socket通信技术,用于构建高效、可扩展的网络应用。Socket在计算机网络中起到桥梁的作用,允许两个远程应用程序通过TCP/IP进行数据交换。...

    java_Socket多线程服务器源代码介绍

    ### Java Socket多线程服务器源代码介绍 #### 一、Java Socket基础知识 在开始之前,我们先了解一下Java Socket的基本概念。Socket是一种用于网络通信的技术,它允许不同计算机上的应用程序通过网络进行通信。Java...

    Java_socket 通信示例(Java源码)

    在这个"Java_socket 通信示例"中,我们看到的是一个简单的聊天室应用,它利用了Java的Socket API来实现实时的数据交换。以下是对这个示例的详细解读: 首先,让我们了解什么是Socket。在计算机网络中,Socket是应用...

    Java Socket编程实现的简单多线程WEB服务器

    Java Socket 编程实现的简单多线程 WEB 服务器 在本文中,我们将详细介绍如何使用 Java 的 Socket 编程实现一个简单的多线程 WEB 服务器。 Socket 编程简介 Socket 编程是 Java 网络编程的基础,它允许开发者创建...

    java Socket多线程通讯实例

    本实例探讨的是如何利用Java的Socket实现TCP(Transmission Control Protocol)协议下的多线程通讯,允许一个服务端同时处理多个客户端的连接请求。 首先,TCP是一种面向连接的、可靠的、基于字节流的传输层通信...

    Java Socket多线程实例及文档

    对于"Java Socket多线程实例",可能是更复杂的多线程Socket应用案例,可能涵盖了更丰富的功能,例如线程池管理、心跳检测、超时处理等高级话题。 六、结论 Java Socket与多线程的结合是构建高效网络服务器的关键...

    TCP-socket.zip_java_java Tcp _java socket _socket_socket多线程

    学习这个示例,我们可以掌握如何在Java中编写TCP Socket程序,包括创建服务器端的`ServerSocket`,接受客户端连接,创建客户端的`Socket`,以及在多线程环境下处理并发连接。此外,还能了解如何使用Java的IO或NIO...

    Java Socket学习---单线程阻塞

    "Java Socket学习---单线程阻塞"这个主题主要探讨了如何使用Java的Socket类进行单线程的阻塞式通信,这种模式通常用于简单的客户端-服务器应用。在这个场景中,服务器端通过一个线程处理一个客户端的请求,当请求被...

    Java Socket示例

    综上所述,"Java Socket示例"是一个展示如何在Java中使用Socket进行网络通信的基础应用,它涉及到了网络编程、多线程和GUI设计等多个方面,是学习Java网络编程的绝佳起点。通过理解和实践这个示例,开发者可以更好地...

    Java Socket 多线程通信

    综上所述,Java Socket结合多线程技术,使得我们可以构建能够高效处理多个客户端连接的服务端应用程序,实现自定义对象的网络传输,这对于开发分布式系统或网络应用具有重要意义。在实际项目中,还需要考虑安全性、...

    Java网络编程socket通讯简单封装(使用多线程)_20170808_LK

    在这个主题中,“Java网络编程socket通讯简单封装(使用多线程)”着重讨论了如何在Java中使用Socket进行基本的网络通信,并通过多线程提升并发处理能力。 首先,Socket在Java中的实现主要依赖于`java.net.Socket`和`...

    java socket工具类示例

    在本示例中,我们将探讨如何使用Java Socket创建一个简单的控制台聊天系统,包括客户端(client)和服务器端(server)的实现。 首先,我们需要理解Socket的基本概念。Socket在计算机网络中是一个通信协议,它允许...

Global site tag (gtag.js) - Google Analytics