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();
}
}
相关推荐
一旦有客户端连接,`ServerSocket` 将返回一个新的 `Socket` 对象,用于与该客户端通信。 在`MathServer.java`中,我们可以预期服务器端代码会执行以下步骤: 1. 创建 `ServerSocket` 对象,指定监听的端口号。 2. ...
Java 线程循环和 ServerSocket 与 Socket 编程 Java 线程循环是指在 Java 中使用多线程技术来实现循环操作,线程循环输出:线程名 run XX 次!每次循环休眠一定的时间,该时间有属性决定。在 Java 中,可以使用 ...
Java 多线程和 Socket ...我们了解了如何使用继承 Thread 类和实现 Runnable 接口来创建线程,以及如何使用 ServerSocket 和 Socket 类来实现服务器端和客户端的通信。这些知识点将为我们以后的学习和开发提供了基础。
socket与serversocket交互信息
每当有新的连接到来,`accept()`方法就会返回一个新的Socket实例,用于与该客户端的通信。服务器端通常会使用多线程处理来自不同客户端的连接,确保每个客户端的消息都能得到及时响应。 在实现聊天功能时,服务器端...
在提供的"Socket与ServerSocket简解.docx"文档中,可能详细介绍了Socket和ServerSocket的工作原理、API使用以及相关的异常处理。而"Socket编程实践源码"则包含了一个具体的实现示例,你可以通过阅读源码进一步理解其...
3. 数据交换:通过返回的Socket对象,服务器可以使用`OutputStream`和`InputStream`进行数据发送和接收。 客户端则需要找到服务器的IP地址和端口号,然后建立到服务器的连接。客户端的步骤包括: 1. 创建Socket:...
a) 使用ServerSocket、Socket完成服务端和客户端的连接。 b) 服务端使用多线程的方式可以接受多个客户端。 c) 使用对象的方式,在服务端和客户端之间传送数据。
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 8888); serverSocket.Bind(endpoint); serverSocket....
在Java编程语言中,`Socket`和`ServerSocket`是用于网络通信的重要组件,它们构成了基于TCP协议的基础网络通信框架。下面将详细讲解这两个类及其在实际应用中的使用。 `ServerSocket`是Java中的服务器端套接字类,...
一旦创建,服务器就可以在该端口上等待客户端的连接请求,当有连接请求到来时,`ServerSocket`会返回一个新的`Socket`对象,用于处理与客户端的通信。 `Socket`,另一方面,是Java中的另一关键组件,它代表了网络...
当有连接请求时,accept返回一个新的Socket对象,用于和客户端通信,如`Socket clientSocket = serverSocket.accept();` 2. **Socket的使用**: - 客户端创建Socket对象,指定服务器的IP地址和端口号,如`Socket ...
Socket clientSocket = serverSocket.accept(); ``` 接着,服务器可以通过`clientSocket`对象与客户端进行数据交换。读写数据时,我们通常需要获取输入流和输出流: ```java InputStream input = clientSocket....
在AS3(ActionScript 3)中,虽然没有直接对应的ServerSocket和Socket类,但Flash Player和Adobe AIR提供了一个相似的API,即NetConnection和NetStream。NetConnection用于建立客户端和服务器之间的连接,而...
3. Java的`ServerSocket`与`Socket`: 在Java网络编程中,`ServerSocket`用于创建服务器端的监听套接字,它监听特定的端口,等待客户端的连接请求。一旦有客户端连接,`ServerSocket`的`accept`方法会返回一个新的`...
`ServerSocket`提供了`accept()`方法,该方法会阻塞,直到有客户端连接为止,一旦连接建立,它会返回一个新的`Socket`对象,表示与客户端的连接。 二、`Socket`类 `Socket`是Java网络编程中的主要客户端接口,它...
一旦有客户端请求连接,ServerSocket就会创建一个新的Socket对象与之对应。 4. **连接建立**:客户端使用Socket的connect()方法连接到指定的服务器地址和端口,服务器端则使用ServerSocket的accept()方法等待并接受...
Java多线程环境下使用ServerSocket和Socket进行服务端与客户端之间的通信是一个经典的网络编程模型。在这个模型中,服务端使用ServerSocket类监听特定端口,等待客户端的连接请求。而客户端则通过Socket类建立与...
在这个系统中,`ServerSocket`扮演服务器端的角色,监听特定端口上的连接请求,而`Socket`则代表客户端,与服务器建立连接并进行数据交换。 首先,我们来详细了解一下`ServerSocket`。`java.net.ServerSocket`类...
这个实例程序可能包含了创建客户端Socket、服务端ServerSocket,以及它们之间的数据传输过程。在学习和使用这个实例时,可以深入理解TCP连接的建立、数据的封装与解封装,以及Android网络编程的细节。通过实践,你...