Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>Socket编程>>教您用Java做一个最简单的Socket通话程序
教您用Java做一个最简单的Socket通话程序
2005-07-06   来源:Linux伊甸园  作者:Linux伊甸园
Java中的网络编程是一个很重要的部分,也是其编程优越性的地方之一。在Java中有一个专门的Java.net类库来管理网络编程的有关方法。

下面先介绍在Java中怎样用socket进行客户与服务器通信。最后再介绍一个一个最简单的通话程序。

一、怎样用socket进行客户与服务器通信

在Java中用socket进行客户/服务器之间的通信编程。Socket是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。

通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。

要想与服务器通信必须具备三个条件:服务器程序、客户程序和连接它们的socket程序。这三个部分缺一不可。但是,客户与服务器之间的通信有很多的方式,其中另一个方法是把客户作为索取者,把服务器作为给予者。下面我们看一看Java的服务器编程。

在Java中,服务器有3个主要的功能:

1.在Java.net类库中通过构造一个ServerSocket类的实例使服务器能够检测到指定端口的信息。用ServerSocke中的accept()方法可以使服务器检测到指定端口的活动。另外,服务器还负责检测要求与它连接的客户。

·Socket类的实例代表客户与服务器连接成功。通过编程可以使多个用户通过同一个端口与服务器相连,其中都是Socket 类的实例。

2.可以分别用Socket类的getInputStream()和getOutStream()方法来发送和捕捉数据。其使用方法如下:

try
{ 
ServerSocket myServerSocket=
new ServerSocket(100); 
Socket my100Socket=
myServerSocket.accept(); 
}
catch(Exception e)
{
}


在上面的代码中,首先构造一个ServerSocket类的实例,并传递给它一个整数作为服务器指定可以使用的给定端口,如下:

ServerSocket myServerSocket
=new ServerSocket(100);


在Java程序中如果每次构造ServerSocket时都能保持捕捉异常事件,则就随时指定了准备使用的端口。下面的代码使用accept()方法来检测端口的活动。

Socket my100Socket
=myServerSocket.accept();


Accept()方法直到接收到用户的连接请求,才继续执行中断的执行程序。一旦客户的连接成功,my100Socket就代表该连接,并且可以发送和接收数据。

最后,我们看一看客户是怎样请求连接的。其连接方法如下:

try
{ 
Socket mySocket=new
Socket("www.cpcw.com",100); 
}
catch(Exception e )
{
}


通过上面的代码可能看出,也是通过Socket类来实现的。下面我们通过一个网络编程的实例来说明如何进行网络通信。

二、一个最简单的通话程序

通话器服务器:

import java.net.*; 
import java.io.*; 
import java.lang.*; 

public class myserver
{ 
public static void main(String args[])
{ 
ServerSocket server; 
Socket socket; 
String s; 
InputStream Is; 
OutputStream Os; 
DataInputStream DIS; 
PrintStream PS; 

try{ 
//在端口4321注册服务 
server=new ServerSocket(4321); 
socket=server.accept();
//监听窗口,等待连接 

System.out.println("server ok"); 
System.out.println
("**********************
**************************"); 
System.out.println(""); 

//获得对应Socket的输入/输出流 
Is=socket.getInputStream(); 
Os=socket.getOutputStream(); 
//建立数据流 
DIS=new DataInputStream(Is); 
PS=new PrintStream(Os); 
DataInputStream in=new
DataInputStream(System.in); 
while(true){ 
System.out.println(""); 
System.out.println("please
wait client's message..."); 
System.out.println(""); 
s=DIS.readLine();
//读入从client传来的字符串 
System.out.println("client said:"+s);
//打印字符串 
if(s.trim().equals("BYE"))break;
//如果是"BYE",就退出 
System.out.print("you say:"); 
s=in.readLine();
//读取用户输入的字符串 
PS.println(s);
//将读取得字符串传给client 
if(s.trim().equals("BYE"))break;
//如果是"BYE",就退出 

} 

//关闭连接 
DIS.close();
//关闭数据输入流 
PS.close(); 
//关闭数据输出流 
Is.close(); 
//关闭输入流 
Os.close(); 
//关闭输出流 
socket.close(); 
//关闭sockey 
} 
catch(Exception e)
{ 
System.out.println("Error:"+e); 
} 
} 
}


通话器客户端

import java.net.*; 
import java.io.*; 
import java.lang.*; 

public class myclient
{ 
public static void main(String args[])
{ 
if (args.length<1)
{
//判断命令加参数没有 
System.out.println
("you forget the name of the server!"); 
System.out.println
("see also: myclient yxf"); 
System.exit(1); 
//如果没加参数就退出 
} 

Socket socket; 
String s="yxfsoft@263.net"; 
String len; 
InputStream Is; 
OutputStream Os; 
DataInputStream DIS; 
PrintStream PS; 
try{ 
//向主机名为args[0]的服务器申请连接 
//注意端口号要与服务器保持一致:4321 
socket=new Socket(args[0],4321); 

System.out.println("client ok"); 
System.out.println
("**********************
**************************"); 
System.out.println(""); 

//获得对应socket的输入/输出流 
Is=socket.getInputStream(); 
Os=socket.getOutputStream(); 
//建立数据流 
DIS=new DataInputStream(Is); 
PS=new PrintStream(Os); 
DataInputStream in=new 
DataInputStream(System.in); 

while(true){ 
System.out.print("you say:"); 
s=in.readLine();
//读取用户输入的字符串 
PS.println(s); 
//将读取得字符串传给server 
if(s.trim().equals("BYE"))break; 
//如果是"BYE",就退出 
else 
{ 
System.out.println(""); 
System.out.println
("please wait server's message..."); 
System.out.println(""); 
} 
s=DIS.readLine();
//从服务器获得字符串 
System.out.println("server said:"+s);
//打印字符串 
if(s.trim().equals("BYE"))break;
//如果是"BYE",就退出 

} 

//关闭连接 
DIS.close();
//关闭数据输入流 
PS.close(); 
//关闭数据输出流 
Is.close(); 
//关闭输入流 
Os.close();
//关闭输出流 
socket.close(); 
//关闭socket 
} 
catch(Exception e)
{ 
System.out.println("Error:"+e); 
} 
} 
}


  --相关文章--
· 调整nbsp;Javanbsp;I Onbsp;性能 (2007-04-13)
· 用Java实现FTP服务器 (2007-04-13)
· 探讨对象次第读写(Serialization) (2007-04-13)
· 彻底明白Java的IO系统 (2007-04-13)
· 使用缓冲IO提高性能 (2007-04-13)
· 两远程客户端之间的通讯原理 (2007-04-13)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接