【Android笔记】ServerSocket 与 Socket的区别

1 ServerSocket类
    
创建一个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();
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()方法关闭流和流套接字。

附小程序加以说明:

服务器端代码:

 1 import java.io.IOException;
 2 import java.io.OutputStream;
 3 import java.net.ServerSocket;
 4 import java.net.Socket;
 5
 6
 7
 8 public class Myserver {
 9
10 //建立ServerSocket,并设置其端口号
11     private ServerSocket ss;
12
13     public static final int port=8962;
14
15     public Myserver(){
16
17     try{
18
19     ss=new ServerSocket(port);
20
21     }catch(IOException e){
22
23     e.printStackTrace();
24     }
25
26     }
27     public void setConnection() throws IOException{
28    //建立服务器端的Socket
29     Socket s;
30     OutputStream os;
31     try{ //ServerSocke.accept()t返回一个Socket对象
32
33     s=ss.accept();
34     os=s.getOutputStream();
35     os.write("hello".getBytes());
36     os.close();
37     s.close();
38     }catch(IOException e){
39
40     e.printStackTrace();
41     }
42
43     }
44
45     public static void main(String[] args) throws IOException {
46
47     Myserver ms=new Myserver();
48     ms.setConnection();
49
50 }
51
52 }

客户端代码:

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.io.InputStreamReader;
 5 import java.net.Socket;
 6
 7
 8
 9 public class Myclient {
10       public static final String IP="172.16.221.134";
11       public static final int port=8962;
12       private Socket s;
13
14       public Myclient() throws IOException{
15 try{
16    s=new Socket(IP,port);
17
18 }catch(IOException e){
19
20    e.printStackTrace();
21 }
22       }
23
24       public void setConnection()throws IOException{
25
26        InputStream is;
27
28     try{
29     is=s.getInputStream();
30     BufferedReader br=new BufferedReader(new InputStreamReader(is));
31
32     System.out.println(br.readLine());
33
34     }catch(IOException e){
35
36     e.printStackTrace();
37     }
38
39
40       }
41 public static void main(String args[]) throws IOException{
42
43    Myclient mc=new Myclient();
44    mc.setConnection();
45
46 }
47 }

参考原文:http://www.cnblogs.com/mareymarey111/archive/2011/12/08/2280253.html

时间: 2024-10-13 10:41:53

【Android笔记】ServerSocket 与 Socket的区别的相关文章

Android笔记 IntentService与Service的区别

Service 在官方API的描述为 A Service is an application component representing either an application's desire to perform a longer-running operation while not interacting with the user or to supply functionality for other applications to use. Each service clas

ServerSocket与Socket类

ServerSocket与Socket类 TCP套接字协议: TCP最主要的特征就是能够建立长时间的连接,而且能够保证数据安全的送达,但是速度比较慢.使用TCP进行连接的时候会有三次握手,之后才建立起服务器与客户端的连接,因为TCP的链接习惯是询问对方机器是否存在,不存在就不会建立连接,存在才会建立连接. 示意图: ServerSocket类: 在Java中想要使用TCP协议做编写服务端的话,需要使用到ServerSocke类,这个类是TCP协议的. TCP协议的操作类都在java.net包下放

Android笔记:SurfaceView与SurfaceHolder对象

摘要 调试Media播放时,不时用到SurfaceView与SurfaceHolder对象,写case测试及实际运行效果, 基本上搞清楚这两个对象的用法及区别 1.SurfaceView public class SurfaceView extends View SurfaceView是视图(View)的继承类, 这个视图里内嵌了一个专门用于绘制 调试Media播放时,不时用到SurfaceView与SurfaceHolder对象,写case测试及实际运行效果, 基本上搞清楚这两个对象的用法及区

Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理

通过socket获取字节流处理时最初使用的是BufferedReader和PrintWriter  这种方式在解析字符串时是比较方便的 但是在处理字节时不够方便最终还是回归到InputStream和OutputStream方式 不使用缓存直接使用字节流操作,一次传输的字节数据在300字节以内,目前没有测试差距会有多大. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException;

Android笔记:java 中的数组

在与嵌入式设备通讯的过程中使用的socket通讯 获取的字节流,通常转换为字节数组,需要根据协议将字节数组拆分.对于有规律的重复拆分可以使用,由于java中不能像c中直接进行内存操作例如使用struct 内存拷贝可以直接实现,这里考虑的是借用数组拷贝的方式来实现. java数组复制参考 引自百度空间 同时参考 数组拷贝之java.lang.System.arraycopy和java.util.Arrays.copyOf方法 java数组复制的4种方式,java数组拷贝问题 JAVA数组的复制是引

Android笔记之网络-基本了解

1.3个相关API接口 Android网络编程相关的API接口与相关用途如下图 2. 2种网络架构模式 B/S----浏览器/服务器端模式,通过应用层的HTTP协议通信,不需要特定客户端软件,而是需要统一规范的客户端,简而言之就是Android网络浏览器(如chrome,UcWeb,QQ浏览器等等)访问web服务器端的方式了. C/S----->客户端/服务器端模式,通过任意的网络协议通信,需要特定的客户端软件. 3.基于封装与协议,2种方式通信 如果要实现网络互联,我们要思考两个需要解决的技术

TCP/IP,HTTP,Socket的区别与联系

一 忆往昔,尽是悔恨泪. ? ? ? 在学校的时候学过,网络七层,也知道tcp的三次握手.但因为根本没用在实际开发中,所以逐渐淡忘.现在就再次理解下三个的区别与联系. 二 正题 ? ? ? 网络七层:物数网传会表应.分别为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层.其中,底层三层:物理层,数据链路层,网络层是网络工程师研究的对象,而其它四层,是用户面向和关心的问题. http协议:超文本传输协议, 对应于应用层. tcp协议:传输控制协议,对应于传输层. ip协议:对应于网络层.

【Android笔记】(1)—— Activity生命周期与通信

一.Activity 1.Activity状态 活动中:如果Activity在屏幕前,即是可视的,可接受用户的输入. 暂停状态:Activity失去焦点,但仍然可见. 停止状态:如果一个Activity被另一个Activity遮住了,它的状态时停止的. 2.Activity生命周期动作方法 onRestart() : Activity第一次被创建时调用,用于初始化一些数据,如View,此时处于停止状态. onStart(): Activity将要对用户可见时调用,调用后进入停止状态. onRes

Android笔记----Android的网络应用

基于TCP协议的网络通信 使用URL访问网络资源 使用HTTP访问网络 使用WebView视图显示网页       基于TCP协议的网络通信 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,通信的两端之间形成网络虚拟链路.Java对基于TCP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端的通信接口,并通过Socket产生IO流来进行网络通信. 1.1 使用ServerSocket创建TCP服务器端 Java中能接收其他通信实体连接请求的类是