ServerSocket 与 Socket的区别

转载 2012年03月22日 22:14:44
创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务,如:
    ServerSocket MyListener=new ServerSocket(600);
    这里指定提供监听服务的端口是600,一台计算机可以同时提供多个服务,这些不同的服务之间通过端口号来区别,不同的端口号上提供不同的服务。为了随时监听可能的Client请求,执行如下的语句:
    Socket LinkSocket=MyListener.accept();
    该语句调用了ServerSocket对象的accept()方法,这个方法的执行将使Server端的程序处于等待状态,程序将一直阻塞直到捕捉到一个来自Client端的请求,并返回一个用于与该Client通信的Socket对象Link-Socket。此后Server程序只要向这个Socket对象读写数据,就可以实现向远端的Client读写数据。结束监听时,关闭ServerSocket对象:
    Mylistener.close();
1.2 Socket类
    当Client程序需要从Server端获取信息及其他服务时,应创建一个Socket对象:
    Socket MySocket=new Socket(“ServerComputerName”,600);
    Socket类的构造函数有两个参数,第一个参数是欲连接到的Server计算机的主机地址,第二个参数是该Server机上提供服务的端口号。
    Socket对象建立成功之后,就可以在Client和Server之间建立一个连接,并通过这个连接在两个端点之间传递数据。利用Socket类的方法getOutputStream()和getInputStream()分别获得向Socket读写数据的输入/输出流,最后将从Server端读取的数据重新返还到Server端。
    当Server和Client端的通信结束时,可以调用Socket类的close()方法关闭Socket,拆除连接。

ServerSocket 一般仅用于设置端口号和监听,真正进行通信的是服务器端的Socket与客户端的Socket,在ServerSocket 进行accept之后,就将主动权转让了。

1. 服务器端程序设计
    在服务器端,利用ServerSocket类的构造函数ServerSocket(int port)创建一个ServerSocket类的对象,port参数传递端口,这个端口就是服务器监听连接请求的端口,如果在这时出现错误将抛出IOException异常对象,否则将创建ServerSocket对象并开始准备接收连接请求。
    服务程序从调用ServerSocket的accept()方法开始,直到连接建立。在建立连接后,accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。
2.客户端程序设计
    当客户程序需要与服务器程序通信时,需在客户机创建一个Socket对象。Socket类有构造函数Socket(InetAddress addr,int port)和Socket(String host,intport),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字。对于第一个InetAd-dress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象中,如果没有IP地址与host参数相一致,那么将抛出UnknownHostException异常对象。两个函数都通过参数port获得服务器的端口号。假设已经建立连接了,网络API将在客户端基于Socket的流套接字中捆绑客户程序的IP地址和任意一个端口号,否则两个函数都会抛出一个IOException对象。
    如果创建了一个Socket对象,那么它可通过get-InputStream()方法从服务程序获得输入流读传送来的信息,也可通过调用getOutputStream()方法获得输出流来发送消息。在读写活动完成之后,客户程序调用close()方法关闭流和流套接字。

附小程序加以说明:

服务器端代码:

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Myserver {

//建立ServerSocket,并设置其端口号
    private ServerSocket ss;
  
    public static final int port=8962;
   
    public Myserver(){
   
    try{
   
    ss=new ServerSocket(port);
   
    }catch(IOException e){
   
    e.printStackTrace();
    }
   
    }
    public void setConnection() throws IOException{
   //建立服务器端的Socket
    Socket s;
    OutputStream os;
    try{ //ServerSocke.accept()t返回一个Socket对象

    s=ss.accept();
    os=s.getOutputStream();
    os.write("hello".getBytes());
    os.close();
    s.close();
    }catch(IOException e){
   
    e.printStackTrace();
    }
   
    }

    public static void main(String[] args) throws IOException {
   
    Myserver ms=new Myserver();
    ms.setConnection();
  
}

}

客户端代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Myclient {
      public static final String IP="172.16.221.134";
      public static final int port=8962;
      private Socket s;

      public Myclient() throws IOException{
try{
   s=new Socket(IP,port);

}catch(IOException e){
  
   e.printStackTrace();
}
      }
     
      public void setConnection()throws IOException{
      
       InputStream is;
      
    try{
    is=s.getInputStream();
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
   
    System.out.println(br.readLine());
   
    }catch(IOException e){
   
    e.printStackTrace();
    }  
      
     
      }
public static void main(String args[]) throws IOException{
  
   Myclient mc=new Myclient();
   mc.setConnection();
  
}
}

用ServerSocket类与Socket类实现客户端与服务端的交互

ServerSocket类,此类实现服务端的套接字,Socket类,此类实现客户端的套接字,而套接字就是两台机器间通信的端点,所以就用ServerSocket类和Socket类实现客户端与服务端的交互...
  • Zero_zzq
  • Zero_zzq
  • 2017年04月09日 22:58
  • 782

ServerSocket用法详解

在客户/服务器通信模式中,服务器端需要创建监听特定端口的ServerSocket,ServerSocket负责接收客户连接请求。本章首先介绍ServerSocket类的各个构造方法,以及成员方法的用法...
  • Tian779278804
  • Tian779278804
  • 2016年03月18日 12:55
  • 19764

Java网络编程精解学习笔记(第三章 serverSocket详解)

1.构造ServerSocket ServerSocket的构造方法有以下几种重载方法: ServerSocket() ServerSocket(int port) ServerSocket(...
  • cg3410
  • cg3410
  • 2017年01月06日 20:07
  • 242

ServerSocket和Socket建立通信(客户端发送消息服务器接收输出)

这些都是我个人的学习总结。请大家看到又不好的不要妄加评论。可以给我留言一起讨论学习的问题。我是做java开发的现在还是在学习阶段,很多的东西不懂得。。 ServerSocket的作用:就是为了监听处理...
  • yejin191258966
  • yejin191258966
  • 2013年12月21日 16:03
  • 3361

indy和socket的一些区别

1. 下面比较一下serverSokcet与clientSocket和idTcpServer与idTcpClient两组通讯组件的异同: socket即支持同部传送数据又支持异步传送数据。而i...
  • xj82257695
  • xj82257695
  • 2014年08月20日 10:41
  • 639

java网络socket编程(三)之ServerSocket服务器端

一、简介 java提供了一个ServerSocket类表示服务器Socket。服务器Socket在服务器上运行,监听入站ftp连接。每个服务器Socket监听服务器上的一个特定端口。当远程注解上的一个...
  • zzjstudent
  • zzjstudent
  • 2016年07月13日 18:43
  • 4861

使用ServerSocket、Socket创建一个简单的服务聊天程序

使用ServerSocket创建TCP服务器端: 在两个实心实体没有建立虚拟链路之前,必须有一个通信实体先做出“主动姿态”,主动接收来自其他通信实体的连接请求。 ServerSoc...
  • sinat_15274667
  • sinat_15274667
  • 2015年09月07日 23:25
  • 2524

关于socket与serversocket中的输入输出流

1,客户端的socket连接到服务器的套接字
  • hll174
  • hll174
  • 2014年10月17日 23:45
  • 2995

简单的Socket及ServerSocket例子

刚学习socket,参考了一些资料,实现一个简单的java tcp socket Socket 类   socket可以使一个应用从网络中读取和写入数据,不同计算机上的两个应用可以通过连接发送...
  • zhoufenqin
  • zhoufenqin
  • 2015年12月18日 09:06
  • 12986

利用ServerSocket和ClientSocket实现简单通讯

开始这前,在你的窗口中放入ServerSocket和ClientSocket控件。 ServerSocket的控件属性 threadcachsize:创建服务器线程的最大数目。 port...
  • cxcalm
  • cxcalm
  • 2015年08月31日 16:07
  • 1471
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ServerSocket 与 Socket的区别
举报原因:
原因补充:

(最多只允许输入30个字)