Java Socket多线程如何支持服务器模型

开发 后端
Java Socket多线程如何才能更好的为我们服务呢?其实需要我们不断在使用中寻找我们所需要的东西。下面我们就来实际的看看。

Java Socket多线程如何才能更好的使用呢?这就需要我们在有关代码上寻找答案。那么接下来我们就来看看有关Java Socket多线程的详细介绍。希望大家在看了下文之后有所收获。

网络编程的基本模型就是客户机到服务器模型.简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置.并去建立两者之间的联系..然后完成数据的通讯就可以了.这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端.基于这个简单的模型,就可以进入网络编程啦. #t#

Java对这个模型的支持有很多种Api.而这里我只想介绍有关Socket的编程接口.对于Java而言已经简化了Java Socket多线程的编程接口.首先我们来讨论有关提供固定位置的服务方是如何建立的.Java提供了ServerSocket来对其进行支持.事实上当你创建该类的一个实力对象并提供一个端口资源你就建立了一个固定位置可以让其他计算机来访问你.ServerSocket server=new ServerSocket(6789);

这里稍微要注意的是端口的分配必须是唯一的.因为端口是为了唯一标识每台计算机唯一服务的.另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的.好了.我们有了固定位置.现在所需要的就是一根连接线了.该连接线由客户方首先提出要求.因此Java同样提供了一个Socket对象来对其进行支持.只要客户方创建一个Java Socket多线程的实例对象进行支持就可以了.Socket client=new Socket(InetAddress.getLocalHost(),5678);客户机必须知道有关服务器的IP地址.对于着一点Java也提供了一个相关的类InetAddress 该对象的实例必须通过它的静态方法来提供.它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法.

好了.上面的方法基本可以建立一条连线让两台计算机相互交流了.可是数据是如何传输的呢?事实上I/O操作总是和网络编程息息相关的.因为底层的网络是继续数据的.除非远程调用,处理问题的核心在执行上.否则数据的交互还是依赖于IO操作的.所以你也必须导入java.io这个包.java的IO操作也不复杂.它提供了针对于字节流和Unicode的读者和写者,然后也提供了一个缓冲用于数据的读写.

 

  1. BufferedReader in=new BufferedReader(new InputStreamReader
    (server.getInputStream()));   
  2. PrintWriter out=new PrintWriter(server.getOutputStream());  

 

注:public PrintWriter(OutputStream out)根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。此便捷构造方法创建必要的中间 OutputStreamWriter,后者使用默认字符编码将字符转换为字节。

上面两句就是建立缓冲并把原始的字节流转变为Unicode可以操作.而原始的字节流来源于Java Socket多线程的两个方法.getInputStream()和getOutputStream()方.分别用来得到输入和输出.那么现在有了基本的模型和基本的操作工具.我们可以做一个简单的Java Socket多线程例程了.

服务方:

 

  1. import java.io.*;   
  2. import java.net.*;   
  3. public class MyServer {   
  4. public static void main(String[] args) throws 
    IOException{   
  5. ServerSocket server=new ServerSocket(5678);   
  6. Socket client=server.accept();   
  7. BufferedReader in=new BufferedReader(new InputStream
    Reader(client.getInputStream()));   
  8. PrintWriter out=new PrintWriter(client.getOutputStream());   
  9. while(true){   
  10. String str=in.readLine();   
  11. System.out.println(str);   
  12. out.println("has receive....");   
  13. out.flush();   
  14. if(str.equals("end"))   
  15. break;   
  16. }   
  17. client.close();   
  18. }   
  19. }  

 

 

这个程序的主要目的在于服务器不断接收客户机所写入的信息只到.客户机发送"End"字符串就退出程序.并且服务器也会做出"Receive"为回应.告知客户机已接收到消息. 以上就是对Java Socket多线程的详细介绍。

责任编辑:张浩 来源: it168
相关推荐

2010-03-17 17:54:25

java Socket

2010-03-16 10:50:21

Java多线程服务器

2010-03-16 13:47:48

Java多线程服务器

2009-02-18 10:41:16

多线程服务器稳定Java

2009-02-27 11:15:00

多线程服务器MTS专用服务器

2018-01-11 08:24:45

服务器模型详解

2010-03-19 17:04:01

Java socket

2018-11-28 09:53:50

游戏服务器线程

2011-12-08 13:04:06

JavaNIO

2015-07-09 09:49:39

PHPSocket服务器

2018-12-20 09:36:24

2011-06-30 18:03:58

QT 多线程 服务器

2010-03-18 19:39:44

Java Socket

2012-02-15 10:34:29

JavaJava Socket

2010-03-19 15:01:23

Java Socket

2010-03-16 17:00:02

Java多线程支持

2010-03-17 18:04:55

java Socket

2011-12-07 17:05:45

JavaNIO

2011-07-01 10:35:20

QT 多线程 TCP

2010-03-22 12:57:46

Java Socket
点赞
收藏

51CTO技术栈公众号