网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  新官上任,转贴一篇:java做一个最简单的通话程序     
  文章作者:未知  文章来源:水木森林  
  查看:55次  录入:管理员--2007-11-17  
 
  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);
}
}
}

  下载源文件:客户端工程,服务器工程。编程环境为visualj++6.0。
  请读者先在一台机器上运行myserver.exe(myserver.exe在服务器工程内),然后在同一台机器或与第一台机器连了网的机器上打开控制台(dos窗口),然后转到myclient.exe(myclient.exe在客户端工程内)所在的目录,如下运行客户端程序: myclient serverhostname 或 myclient serverhostip ,serverhostname为运行服务器程序的机器名, serverhostip为运行服务器程序的机器的ip地址。运行后就可以相互通话了。这个通话程序只能轮换着说话,读者可以在它的基础上丰富其功能。

原作者:小锋
 
 
上一篇: 新java技术工具亮相游戏开发商大会    下一篇: 用jython构建junit测试包
  相关文档
在移动设备上用j2me实现动画 11-17
java - io包的学习引导文章 11-17
java认证学习资料 11-17
了解java,便了解了微软.net 11-17
swing入门基础知识点全接触 11-17
java进阶:基于socket的java网络编程集粹 11-26
java 理论与实践:变还是不变? 11-17
jbuilder2005单元测试之创建测试固件 11-16
spring xml配置十二个最佳实践 11-16
JAVA基础:随机整数的生成 08-06
jdbc专题介绍(3) 11-17
java web应用中如何实现任务有效调度 11-17
用java实现线程等待提示框 11-16
global 对象 11-16
敏捷开发的必要技巧:将注释转为代码 11-17
实战java多线程编程中不提倡使用的方法 11-16
sender id框架规范概述 11-17
jsp的设计模式基础:view helper模式 12-10
weblogic 6.0中servlet的注册方法 11-17
实战jboss?d?d教你写第一个ejb 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息