📄 92.html
字号:
<STYLE type=text/css>
<!--
body,td { font-size:9pt;}
hr { color: #000000; height: 1px}
-->
</STYLE>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD><TITLE>精选文章 >> 深入研究 >> Java做一个最简单的通话程序</title>
</head>
<body >
<p><IMG SRC="../image/jsp001_middle_logo.gif" WIDTH="180" HEIGHT="60" BORDER=0 ALT=""></p>
<table width=100% bgcolor="#cccccc" align=center cellpadding="2" cellspacing="0" border=1 bordercolorlight="#000000" bordercolordark="#FFFFFF">
<tr bgcolor="#EFF8FF"><td>
<a href=http://www.jsp001.com/list_thread.php?int_attribute=2>精选文章</a>
>> <a href=http://www.jsp001.com/list_thread.php?forumid=18&int_attribute=2>深入研究</a>
>> Java做一个最简单的通话程序 [<a href=http://www.jsp001.com/forum/showthread.php?goto=newpost&threadid=92>查看别人的评论</a>]<br>
<hr><p>由 webmaster 发布于: 2001-01-21 09:00</p><p> </p><p>Java中的网络编程是一个很重要的部分,也是其编程优越性的地方之一。在Java中有一个专门的Java.net类库来管理网络编程的有关方法。<br> 下面先介绍在Java中怎样用socket进行客户与服务器通信。最后再介绍一个一个最简单的通话程序。<br><br>一.怎样用socket进行客户与服务器通信<br> 在Java中用socket进行客户/服务器之间的通信编程。Socket是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。<br> 要想与服务器通信必须具备三个条件:服务器程序、客户程序和连接它们的socket程序。这三个部分缺一不可。但是,客户与服务器之间的通信有很多的方式,其中另一个方法是把客户作为索取者,把服务器作为给予者。下面我们看一看Java的服务器编程。<br> 在Java中,服务器有3个主要的功能:<br> 1.在Java.net类库中通过构造一个ServerSocket类的实例使服务器能够检测到指定端口的信息。用ServerSocke中的accept()方法可以使服务器检测到指定端口的活动。另外,服务器还负责检测要求与它连接的客户。<br>·Socket类的实例代表客户与服务器连接成功。通过编程可以使多个用户通过同一个端口与服务器相连,其中都是Socket 类的实例。<br> 2.可以分别用Socket类的getInputStream()和getOutStream()方法来发送和捕捉数据。其使用方法如下:<br><br> try{<br> ServerSocket myServerSocket=new ServerSocket(100);<br> Socket my100Socket=myServerSocket.accept();<br> }catch(Exception e){}<br><br> 在上面的代码中,首先构造一个ServerSocket类的实例,并传递给它一个整数作为服务器指定可以使用的给定端口,如下:<br><br> ServerSocket myServerSocket=new ServerSocket(100);<br><br> 在Java程序中如果每次构造ServerSocket时都能保持捕捉异常事件,则就随时指定了准备使用的端口。下面的代码使用accept()方法来检测端口的活动。<br><br> Socket my100Socket=myServerSocket.accept();<br><br> Accept()方法直到接收到用户的连接请求,才继续执行中断的执行程序。一旦客户的连接成功,my100Socket就代表该连接,并且可以发送和接收数据。<br>最后,我们看一看客户是怎样请求连接的。其连接方法如下:<br><br> try{<br> Socket mySocket=new Socket("www.cpcw.com",100);<br> }catch(Exception e ){}<br><br> 通过上面的代码可能看出,也是通过Socket类来实现的。下面我们通过一个网络编程的实例来说明如何进行网络通信。<br><br>二.一个最简单的通话程序<br><br>通话器服务器:<br>import java.net.*;<br>import java.io.*;<br>import java.lang.*;<br><br>public class myserver{<br>public static void main(String args[]){<br>ServerSocket server;<br>Socket socket;<br>String s;<br>InputStream Is;<br>OutputStream Os;<br>DataInputStream DIS;<br>PrintStream PS;<br><br>try{<br>//在端口4321注册服务<br>server=new ServerSocket(4321);<br>socket=server.accept(); //监听窗口,等待连接<br><br>System.out.println("server ok");<br>System.out.println("************************************************");<br>System.out.println("");<br><br>//获得对应Socket的输入/输出流<br>Is=socket.getInputStream();<br>Os=socket.getOutputStream();<br>//建立数据流<br>DIS=new DataInputStream(Is);<br>PS=new PrintStream(Os);<br>DataInputStream in=new DataInputStream(System.in);<br>while(true){<br>System.out.println("");<br>System.out.println("please wait client's message...");<br>System.out.println("");<br>s=DIS.readLine(); //读入从client传来的字符串<br>System.out.println("client said:"+s); //打印字符串<br>if(s.trim().equals("BYE"))break; //如果是"BYE",就退出<br>System.out.print("you say:");<br>s=in.readLine(); //读取用户输入的字符串<br>PS.println(s); //将读取得字符串传给client<br>if(s.trim().equals("BYE"))break; //如果是"BYE",就退出<br><br>}<br><br>//关闭连接 <br>DIS.close(); //关闭数据输入流<br>PS.close(); //关闭数据输出流<br>Is.close(); //关闭输入流<br>Os.close(); //关闭输出流<br>socket.close(); //关闭sockey<br>}<br>catch(Exception e){<br>System.out.println("Error:"+e);<br>}<br>}<br>} <br><br><br>通话器客户端 <br>import java.net.*;<br>import java.io.*;<br>import java.lang.*;<br><br>public class myclient{<br>public static void main(String args[]){<br>if (args.length<1){ //判断命令加参数没有<br>System.out.println("you forget the name of the server!");<br>System.out.println("see also: myclient yxf");<br>System.exit(1); //如果没加参数就退出<br>}<br><br>Socket socket;<br>String s="yxfsoft@263.net";<br>String len;<br>InputStream Is;<br>OutputStream Os;<br>DataInputStream DIS;<br>PrintStream PS;<br>try{<br>//向主机名为args[0]的服务器申请连接<br>//注意端口号要与服务器保持一致:4321<br>socket=new Socket(args[0],4321);<br><br>System.out.println("client ok");<br>System.out.println("************************************************");<br>System.out.println("");<br><br>//获得对应socket的输入/输出流<br>Is=socket.getInputStream();<br>Os=socket.getOutputStream();<br>//建立数据流<br>DIS=new DataInputStream(Is);<br>PS=new PrintStream(Os);<br>DataInputStream in=new DataInputStream(System.in);<br><br>while(true){<br>System.out.print("you say:");<br>s=in.readLine(); //读取用户输入的字符串<br>PS.println(s); //将读取得字符串传给server<br>if(s.trim().equals("BYE"))break; //如果是"BYE",就退出<br>else <br>{<br>System.out.println("");<br>System.out.println("please wait server's message...");<br>System.out.println("");<br>}<br>s=DIS.readLine(); //从服务器获得字符串 <br>System.out.println("server said:"+s); //打印字符串<br>if(s.trim().equals("BYE"))break; //如果是"BYE",就退出<br><br>}<br><br>//关闭连接<br>DIS.close(); //关闭数据输入流<br>PS.close(); //关闭数据输出流<br>Is.close(); //关闭输入流<br>Os.close(); //关闭输出流<br>socket.close(); //关闭socket <br>}<br>catch(Exception e){<br>System.out.println("Error:"+e);<br>}<br>}<br>}<br><br> 下载源文件:客户端工程,服务器工程。编程环境为VisualJ++6.0。<br> 请读者先在一台机器上运行myserver.exe(myserver.exe在服务器工程内),然后在同一台机器或与第一台机器连了网的机器上打开控制台(Dos窗口),然后转到myclient.exe(myclient.exe在客户端工程内)所在的目录,如下运行客户端程序: myclient serverhostName 或 myclient serverhostIp ,serverhostName为运行服务器程序的机器名, serverhostIp为运行服务器程序的机器的IP地址。运行后就可以相互通话了。这个通话程序只能轮换着说话,读者可以在它的基础上丰富其功能。 <br><br>原作者:小锋<br></p></td>
</tr>
</table>
<p>
<CENTER><a href="http://www.jsp001.com/forum/newreply.php?action=newreply&threadid=92">点这里对该文章发表评论</a></CENTER>
<p>该文章总得分是 <font color=red>0</font> 分,你认为它对你有帮助吗?
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=92&intVote=4","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>非常多</a>](<font color=red>0</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=92&intVote=2","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>有一些</a>](<font color=red>0</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=92&intVote=1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>无帮助</a>](<font color=red>0</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=92&intVote=-1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>是灌水</a>](<font color=red>0</font>) </p>
<script language="javascript" src="http://www.jsp001.com/include/read_thread_script.php?threadid=92"></script>
<p><CENTER>
Copyright © 2001 - 2009 JSP001.com . All Rights Reserved <P>
<IMG SRC="../image/jsp001_small_logo.gif" WIDTH="85" HEIGHT="30" BORDER=0 ALT="">
</CENTER></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -