知识大全 Java Socket篇

Posted

篇首语:一卷旌收千骑虏,万全身出百重围。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java Socket篇相关的知识,希望对你有一定的参考价值。

比尔学Java:Java Socket篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  比尔最近接到一个项目 是要在原来的系统上实现客户端与服务器的连接 原来的系统是用Java开发的 项目组讨后 决定应用Java提供的Socket类来解决问题 比尔是C开发的高手 对Java却只略知皮毛 所以 比尔一头扎进Java中 开始他的学习历程 当然 首先还要解决眼前的问题 学习Socket编程   在学习Socket编程之前 先看看自己是否熟悉TCP UDP Ports等网络基本概念 要是还不熟悉的话就得先去补补课罗!   Socket 的基本概念   Socket 也就是俗称的套接字    Sun Java中的定义 是运行在网络上的两个程序间双向通讯连接的末端 它提供客户端和服务器端的连接通道 Socket绑定于特定端口这样TCP层就知道将数据提供给哪个应用程序    字面上的理解 Socket的意思是 插座 孔 你还可以把它形象地理解为打电话用的电话机 你从听筒里听到对方声音 同时将声音通过话筒传给对方     我想你现在和我刚开始的时候一样 好像有点明白 又好像不是很明白 没关系 我希望通过下面例子的讲解你能够彻底地掌握它 在实例之前 让我们先来看看Socket实现的基本原理   Socket编程实现原理  从连接的建立到连接的结束 每个Socket应用都大致包含以下几个基本步骤    服务器端socket绑定于特定端口 服务器侦听socket等待连接请求    客户端向服务器和特定端口提交连接请求    服务器接受连接 产生一新的socket 绑定到另一端口 由此socket来处理和客户端的交互 服务器继续侦听原socket来接受其他客户端的连接请求      连接成功后客户端也产生一socket 并通过它来与服务器端通讯(注意 客户端socket并不与特定端口绑定)    接下来 服务器端和客户端就通过读取和写入各自的socket来进行通讯   注意 本文中只讲解基于TCP的Socket应用   Java中的Socket类  Java中提供两个类(在包中)——Socket和ServerSocket来分别实现客户端和服务器端Socket 但Socket的实际工作是由抽象类SocketImpl的实例来完成的 这其实是设计模式中Abstract Factory模式的一个应用     ServerSocket类的常用构造器和主要方法     ServerSocket(int port) 在指定的端口号上产生一服务器端socket  Socket accept()   侦听socket 接受连接  Socket类的常见构造器和主要方法     Socket(String host int port) 生成一socket并连接至指定的主机和端口   InputStream getInputStream() 返回socket的输入流  OutputStream getOuputStream() 返回socket的输出流  一个客户服务器实例  了解了上面的一些基本知识以后 我想大家现在都迫不及待地想亲自动手编写自己的socket 那就让我们开始吧!在这个例子中 我们模仿了一个Echo服务 它侦听 端口 客户端接受用户键盘输入并向服务器端发出连接请求 服务器端接受客户端连接 连接成功后建立会话 客户端于是向服务器端发送用户输入信息 服务器端接收此信息并且简单返回给客户端 源码如下     (服务器端)     /**   * <p>Title:EchoServer java </p>   * <p>Description: EchoServer create a echo like server at port </p>   * @author Mac   * @version / /    */    import *;  import java io *;    public class EchoServer     public static void main (String[] args) throws IOException      ServerSocket echoServer = null;   try      echoServer = new ServerSocket( ); //creat a server socket at port    (问题一)      catch(IOException e)      System err println("Couldn t listen on port: ");   System exit( );        Socket echoClient = null;   try      echoClient = echoServer accept(); //accept a connection      catch(IOException e)      System err println("IO error:" + e getMessage());   System exit( );         PrintWriter out = new PrintWriter(echoClient getOutputStream() true);   //gets the socket s output stream and opens a PrintWriter on it   //if you remove the argument true what will happen?(问题三)   BufferedReader in = new BufferedReader(   new InputStreamReader(echoClient getInputStream()));   //gets the socket s input stream and opens a BufferedReader on it   String strFromClient;     while((strFromClient = in readLine()) != null)      out println("result is :" + strFromClient);        in close();   out close();   echoClient close();   echoServer close();         (客户端)  /**   *<p>Title:EchoClient java </p>   *<p>Description: EchoClient creates a socket thereby getting a connection to   echo like server</p>   * @author Mac Wang   * @version / /    */    import *;  import java io *;    public class EchoClient       public static void main(String[] args)      try     Socket echoClient = new Socket("yourhostname" );   //creat a new socket connected to host and port    PrintWriter out = new PrintWriter(echoClient getOutputStream() true);     BufferedReader in = new BufferedReader(   new InputStreamReader(echoClient getInputStream()));   String fromServer fromUser;   BufferedReader stdIn = new BufferedReader(   new InputStreamReader(System in));   //gets the system input stream and opens a BufferedReader on it   while ((fromUser = stdIn readLine()) != null)      if (fromUser equals("bye")) break;   //when user types "bye" then end     System out println("input is:" + fromUser);   out println(fromUser);     fromServer = in readLine();   System out println(fromServer);      out close();   in close();   echoClient close();      catch(UnknownHostException e)      System err println("Unknown host:yourhostname");   System exit( );      catch(IOException e)      System err println("I/ error:" + e getMessage());   System exit( );          现在大家可以分别运行Server和Client 看看程序运行效果(注意 你必须将yourhostname替换成你自己的主机名或IP地址) 并且思考以下几个问题      把端口号换成 后看看程序运行效果?那么 呢?是不是任何数字都可以呢?      如果不采用我们自己编写的echo server 而是连接到系统本身提供的echo server(端口号为 ) 试试看会发生什么情况 客户端Socket是否需要改变呢?      去掉PrintWriter中的参数True 看看程序运行的效果?      注意程序中是如何读取和写入Socket的?    试着多打开几个客户端 看看效果如何?   从问题 中大家可以看出来 上面的例子只支持一个用户连接 那么如何支持多用户的同时访问呢?最简单有效的方法就是利用多线程实现 每个线程对应一个用户连接 server接受一个client连接后 就新产生一个线程 并交由它去处理余下的工作 下面就是支持多用户的服务器端实现   /**  *<p>Title:EchoMultiServer </p>   *<p>Description: EchoServer create a echo like server at port which supports   multi client</p>   * @author Mac Wang   * @version / /    */  import *;  import java io *;  class EchoMultiServerThread extends Thread     private Socket echoClient = nul cha138/Article/program/Java/hx/201311/27141

相关参考

知识大全 Visual C#.Net 网络程序开发Socket篇

VisualC#.Net网络程序开发Socket篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java Socket编程(一)Socket传输模式

JavaSocket编程(一)Socket传输模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java中的Socket编程

Java中的Socket编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Socket是网络上

知识大全 JAVA 的Socket机制

JAVA的Socket机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Socket机制用到的

知识大全 Java中SOCKET通讯源码

Java中SOCKET通讯源码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //ServeOn

知识大全 Java的socket通信的demo

Java的socket通信的demo  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java代码

知识大全 Java进行并发多连接socket编程

Java进行并发多连接socket编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java多

知识大全 Java语言的Socket类[3]

Java语言的Socket类[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   //Obta

知识大全 Java语言的Socket类[2]

Java语言的Socket类[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   isr=ne

知识大全 Java语言的Socket类[1]

Java语言的Socket类[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb