Java是一种可用于进行网络编程
语言,它提供了两种功能强大
网络支持机制:URL访问网络资源
类和用Socket通讯
类,来满足不同
要求。一是URL用于访问Internet网上资源
应用;另一种是针对client/server(客户端/服务器)模式
应用以及实现某些特殊
协议
应用,它
通讯过程是基于TCP/IP协议中传输层接口socket实现
。本文想简单
介绍一下Socket编程
Java实现方法。
客户基于服务器之间使用
大部分通讯组件都是基于socket接口来实现
。Socket是两个程序之间进行双向数据传输
网络通讯端点,有一个地址和一个端口号来标识。每个服务程序在提供服务时都要在一个端口进行,而想使用该服务
客户机也必须连接该端口。Socket因为是基于传输层,所以它是比较原始
通讯协议机制。通过Socket
数据表现形式为字节流信息,因此通讯双方要想完成某项具体
应用则必须按双方约定
方式进行数据
格式化和解释,我们可以看出使用Socket编程比较麻烦,但是它具有更强
灵活性和更广泛
使用领域。
字串5
有些朋友会问,客户机/服务器工作
模式到底是什么样
呢?
,下面我想结合一张图来介绍一下它们
工作模式。
字串8
字串3
那么Java应用程序是如何实现上述过程
呢?java.net包中有两个类Socket和ServerSocket,分别用于在客户机和服务器上创建Socket通讯。
字串4
让我们先来看看客户段程序编写
流程: 字串4
1、 首先调用Socket类
构造函数,以服务器
指定
IP地址或指定
主机名和指定
端口号为参数,创建一个Socket流,在创建Socket流
过程中包含了向服务器请求建立通讯连接
过程实现。 字串1
2、 建立了客户端通讯Socket后。就可以使用Socket
方法getInputStream()和getOutputStream()来创建输入/输出流。这样,使用Socket类后,网络输入输出也转化为使用流对象
过程。
3、 使用输入输出流对象
相应方法读写字节流数据,因为流连接着通讯所用
Socket,Socket又是和服务器端建立连接
一个端点,因此数据将通过连接从服务器得到或发向服务器。这时我们就可以对字节流数据按客户端和服务器之间
协议进行处理,完成双方
通讯任务。 字串9
字串3
4、 待通讯任务完毕后,我们用流对象
close()方法来关闭用于网络通讯
输入输出流,在用Socket对象
close()方法来关闭Socket。 字串3
下面,我想通过一个简单
例子来进一步介绍一下客户端程序
编写
字串6
代码一: 字串2
import java.io.*;
import java.net.*;
public class SocketCommunicationClient
{
public static void main(String[] args)
{
try{
Socket clientSocket =new Socket ("mice",9000);//创建一个流Socket并与主机mice上
端口9000相连接
OutputStream output =clientSocket.getOutputStream();//向此Socket写入字节
一个输出流
DataInputStream input=new DataInputStream(clientSocket.getInputStream());
file://创建新
数据输入流以便从指定
输入流中读出数据
int c;
String response;
while (( c= System.in.read())!=-1)//从屏幕上接受输入
字符串,并且分解成一个个字符
{
output.write((byte)c);
if(c==' ')//如果字符为回车,则输出字符串缓冲
{ 字串1
output.flush();
response=input.readLine();
System.out.println("Communication:" response);
}
}
output.close();
input.close();
clientSocket.close();
} catch (Exception e){
System.err.println("Exception :" e);
}
}
} 这个程序是一个非常
简单
数据通讯
例子,程序先创建了一个Socket并和主机mice上
端口9000相连接,然后打开输入输出流,接着程序从标准输入接收字符并写入流中,每写满一行(以用户键入回车为标志),就把缓冲区中
字符串送往mice上
服务器端程序进行处理,等待服务器端
应答。input.readLine()方法调用将导致程序停滞直到收到应答信息,程序将一直重复这个过程,直到用户输入中止符。最后程序要关闭socket输入输出流,在关闭socket和服务器端
连接。
字串6
上面我们看了如何使用Java编写客户端
Socket接口程序,下面我也想简要
谈一谈服务器端
Socket接口程序
Java实现方法,其过程如下所述: 字串9
字串7
1、 首先调用ServerSocket类以某个端口号为参数,创建一个ServerSocket对象,即是服务器端
服务程序在该指定端口监听
Socket。 字串6
2、 服务器端程序使用ServerSocket对象
accept()方法,接收来自客户机程序
连接请求,此时服务器端将一直保持停滞状态,直到收到客户端发来
连接请求,此时该方法将返回一个新建
Socket类
实例,代表和客户机建立
通讯链路在服务程序内
通讯端点。如果采用Java
多线程编程方法,可以实现并发服务器,继续监听来自其他客户
连接请求。
3、 使用新建
Socket对象创建输入、输出流对象。 字串2
4、 使用流对象
方法完成和客户端
数据传输,按约定协议识别并处理来自客户端
请求数据,并把处理
结果返回给客户端。
5、 客户端工作完毕后,则服务器端程序关闭和客户端通讯
流和通讯
Socket。
字串6
6、 在服务器程序运行结束之间,应当关闭用来监听
Socket.
下面让我们来看一个服务器端
程序
Java实现:
字串8
代码二:
import java.net.*;
import java.io.*;
public class SocketCommunicationServer
{
public static void main(String[] args)
try
{
boolean flag=true;//设置标志位为真
Socket client=null;//创建Socket client以接收来自客户端
请求
String inputLine;
ServerSocket serverSocket =new ServerSocket (9000);//以端口9000创建一个服务器Socket
System.out.println("服务器在端口9000上监听");
file://也可以使用serverSocket.getLocalPort()来获得端口号
while(flag)
{
client=serverSocket.accept();
file://监听并接受与此Socket
连接,该方法会阻塞直到有一个连接产生
DataInputStream input=new DataInputStream(new BufferedInputStream(client.getInputStream()));
PrintStream output=new PrintStream(new BufferedOutputStream(client.getOutputStream()); 字串8
while (( inputLine= input.readLine())!=null)
{
if(inputLine.equals("Stop"))
{
flag=false;
break;
}
output.println(inputLine);
output.flush();
}
output.close();
input.close();
client.close();
}
serverSocket.close();
}catch(IOException e){}
}
}
} 以上,我简略
谈了一下Socket编程
机制以及使用Java进行Socket编程
实现方法,希望能对大家有所帮助。
字串4
![我要研发网[www.51dev.com]](/templets/images/toplogo.gif)
