`
韩悠悠
  • 浏览: 839886 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

3.ServerSocket 与 Socket的区别

 
阅读更多

1.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();
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();

}
}

 

转自:http://apps.hi.baidu.com/share/detail/16554476

分享到:
评论

相关推荐

    java socketServer socket

    一旦有客户端连接,`ServerSocket` 将返回一个新的 `Socket` 对象,用于与该客户端通信。 在`MathServer.java`中,我们可以预期服务器端代码会执行以下步骤: 1. 创建 `ServerSocket` 对象,指定监听的端口号。 2. ...

    有关java线程循环和serversocket和socket的程序.pdf

    Java 线程循环和 ServerSocket 与 Socket 编程 Java 线程循环是指在 Java 中使用多线程技术来实现循环操作,线程循环输出:线程名 run XX 次!每次循环休眠一定的时间,该时间有属性决定。在 Java 中,可以使用 ...

    有关java线程循环和serversocket和socket的程序借鉴.pdf

    Java 多线程和 Socket ...我们了解了如何使用继承 Thread 类和实现 Runnable 接口来创建线程,以及如何使用 ServerSocket 和 Socket 类来实现服务器端和客户端的通信。这些知识点将为我们以后的学习和开发提供了基础。

    socket与serversocket

    socket与serversocket交互信息

    liaotian.rar_socket聊天室

    每当有新的连接到来,`accept()`方法就会返回一个新的Socket实例,用于与该客户端的通信。服务器端通常会使用多线程处理来自不同客户端的连接,确保每个客户端的消息都能得到及时响应。 在实现聊天功能时,服务器端...

    Socket与ServerSocket编程实践聊天

    在提供的"Socket与ServerSocket简解.docx"文档中,可能详细介绍了Socket和ServerSocket的工作原理、API使用以及相关的异常处理。而"Socket编程实践源码"则包含了一个具体的实现示例,你可以通过阅读源码进一步理解其...

    Tcp_Socket.rar_Socket通信界面_TCP_Socket_发送和接收_基于Socket

    3. 数据交换:通过返回的Socket对象,服务器可以使用`OutputStream`和`InputStream`进行数据发送和接收。 客户端则需要找到服务器的IP地址和端口号,然后建立到服务器的连接。客户端的步骤包括: 1. 创建Socket:...

    ServerSocket、Socket 实现的聊天室

    a) 使用ServerSocket、Socket完成服务端和客户端的连接。 b) 服务端使用多线程的方式可以接受多个客户端。 c) 使用对象的方式,在服务端和客户端之间传送数据。

    C#Socket带服务器客户端.rar

    Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 8888); serverSocket.Bind(endpoint); serverSocket....

    socket-ServerSocket例子

    在Java编程语言中,`Socket`和`ServerSocket`是用于网络通信的重要组件,它们构成了基于TCP协议的基础网络通信框架。下面将详细讲解这两个类及其在实际应用中的使用。 `ServerSocket`是Java中的服务器端套接字类,...

    serversocket socket web服务器

    一旦创建,服务器就可以在该端口上等待客户端的连接请求,当有连接请求到来时,`ServerSocket`会返回一个新的`Socket`对象,用于处理与客户端的通信。 `Socket`,另一方面,是Java中的另一关键组件,它代表了网络...

    Socket套接字—Java套接字编程(上1).rar_socket_套接字_套接字 Java

    当有连接请求时,accept返回一个新的Socket对象,用于和客户端通信,如`Socket clientSocket = serverSocket.accept();` 2. **Socket的使用**: - 客户端创建Socket对象,指定服务器的IP地址和端口号,如`Socket ...

    使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket

    本篇文章将详细解析如何使用非阻塞ServerSocketChannel和SocketChannel来替代传统的ServerSocket和Socket。 **1. 阻塞与非阻塞I/O** 在阻塞I/O模型中,当一个线程调用read或write方法时,如果数据没有准备好或者...

    Java_CS.rar_socket

    Socket clientSocket = serverSocket.accept(); ``` 接着,服务器可以通过`clientSocket`对象与客户端进行数据交换。读写数据时,我们通常需要获取输入流和输出流: ```java InputStream input = clientSocket....

    Socket+ServerSocket代码

    在AS3(ActionScript 3)中,虽然没有直接对应的ServerSocket和Socket类,但Flash Player和Adobe AIR提供了一个相似的API,即NetConnection和NetStream。NetConnection用于建立客户端和服务器之间的连接,而...

    有关java线程循环和serversocket和socket的程序分享.pdf

    3. Java的`ServerSocket`与`Socket`: 在Java网络编程中,`ServerSocket`用于创建服务器端的监听套接字,它监听特定的端口,等待客户端的连接请求。一旦有客户端连接,`ServerSocket`的`accept`方法会返回一个新的`...

    Java 实例 - ServerSocket 和 Socket 通信实例源代码+详细指导教程.zip

    `ServerSocket`提供了`accept()`方法,该方法会阻塞,直到有客户端连接为止,一旦连接建立,它会返回一个新的`Socket`对象,表示与客户端的连接。 二、`Socket`类 `Socket`是Java网络编程中的主要客户端接口,它...

    JAVA-Socket-Programming.rar_Socket Programmi_java programming

    一旦有客户端请求连接,ServerSocket就会创建一个新的Socket对象与之对应。 4. **连接建立**:客户端使用Socket的connect()方法连接到指定的服务器地址和端口,服务器端则使用ServerSocket的accept()方法等待并接受...

    实现nodejs与java的socket相互通信

    而在Java中,我们可以使用`java.net.Socket`和`java.net.ServerSocket`类来实现相同的功能。 ### Node.js 实现Socket服务器 在Node.js中,创建一个简单的Socket服务器的步骤如下: 1. 引入`net`模块: ```...

    Java多线程_ServerSocket服务端与客户端通信案例

    Java多线程环境下使用ServerSocket和Socket进行服务端与客户端之间的通信是一个经典的网络编程模型。在这个模型中,服务端使用ServerSocket类监听特定端口,等待客户端的连接请求。而客户端则通过Socket类建立与...

Global site tag (gtag.js) - Google Analytics