岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> 核心技术 >> 网络编程 >> Java正文
比尔学Java:Java Socket篇
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 17:25:01

  比尔最近接到一个项目,是要在原来的系统上实现客户端与服务器的连接。原来的系统是用Java开发的,项目组讨后,决定应用Java提供的Socket类来解决问题。比尔是C开发的高手,对Java却只略知皮毛。所以,比尔一头扎进Java中,开始他的学习历程。当然,首先还要解决眼前的问题,学习Socket编程。
  在学习Socket编程之前,先看看自己是否熟悉TCP、UDP、Ports等网络基本概念,要是还不熟悉的话就得先去补补课罗!
  Socket 的基本概念
  1、Socket,也就是俗称的套接字。
  2、Sun Java中的定义:是运行在网络上的两个程序间双向通讯连接的末端,它提供客户端和服务器端的连接通道。Socket绑定于特定端口这样TCP层就知道将数据提供给哪个应用程序。
  3、字面上的理解,Socket的意思是"插座、孔",你还可以把它形象地理解为打电话用的电话机,你从听筒里听到对方声音,同时将声音通过话筒传给对方。
  
  我想你现在和我刚开始的时候一样:好像有点明白,又好像不是很明白,没关系,我希望通过下面例子的讲解你能够彻底地掌握它。在实例之前,让我们先来看看Socket实现的基本原理。
  Socket编程实现原理
  从连接的建立到连接的结束,每个Socket应用都大致包含以下几个基本步骤:
  1、服务器端socket绑定于特定端口,服务器侦听socket等待连接请求;
  2、客户端向服务器和特定端口提交连接请求;
  3、服务器接受连接,产生一新的socket,绑定到另一端口,由此socket来处理和客户端的交互,服务器继续侦听原socket来接受其他客户端的连接请求;
  
  4、连接成功后客户端也产生一socket,并通过它来与服务器端通讯(注意:客户端socket并不与特定端口绑定);
  5、接下来,服务器端和客户端就通过读取和写入各自的socket来进行通讯。
  注意:本文中只讲解基于TCP的Socket应用
  Java中的Socket类
  Java中提供两个类(在java.net包中)——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服务,它侦听3333端口。客户端接受用户键盘输入并向服务器端发出连接请求,服务器端接受客户端连接,连接成功后建立会话,客户端于是向服务器端发送用户输入信息,服务器端接收此信息并且简单返回给客户端。源码如下:
  
  (服务器端)
  
  /**
   * <p>Title:EchoServer.java </p>
   * <p>Description: EchoServer create a echo-like server at port 3333</p>
   * @author Mac
   * @version 2002/9/2
   */
  
  import java.net.*;
  import java.io.*;
  
  public class EchoServer
  {
   public static void main (String[] args) throws IOException
   {
   ServerSocket echoServer = null;
   try
   {
   echoServer = new ServerSocket(3333); //creat a server socket at port
  3333(问题一)
   }
   catch(IOException e)
   {
   System.err.println("Couldn't listen on port:3333");
   System.exit(-1);
   }
  
   Socket echoClient = null;
   try
   {
   echoClient = echoServer.accept(); //accept a connection
   }
   catch(IOException e)
   {
   System.err.println("IO error:" + e.getMessage());
   System.exit(-1);
   }
  
   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();
  

[1] [2] 下一页


  • 上一个Java:
  • 下一个Java: 没有了
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    传世私服 传奇世界私服 天龙八部私服 bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365