⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0035.htm

📁 Java语言是Internet上最热门的编程语言
💻 HTM
字号:
<html>

<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1  {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
    <p align="center"><big><strong>Java做一个最简单的通话程序</strong></big></p>

<div align="right">---(文/小锋)</div>

<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(&quot;www.cpcw.com&quot;,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(&quot;server ok&quot;);<br>
System.out.println(&quot;************************************************&quot;);<br>
System.out.println(&quot;&quot;);<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(&quot;&quot;);<br>
System.out.println(&quot;please wait client's message...&quot;);<br>
System.out.println(&quot;&quot;);<br>
s=DIS.readLine(); //读入从client传来的字符串<br>
System.out.println(&quot;client said:&quot;+s); //打印字符串<br>
if(s.trim().equals(&quot;BYE&quot;))break; //如果是&quot;BYE&quot;,就退出<br>
System.out.print(&quot;you say:&quot;);<br>
s=in.readLine(); //读取用户输入的字符串<br>
PS.println(s); //将读取得字符串传给client<br>
if(s.trim().equals(&quot;BYE&quot;))break; //如果是&quot;BYE&quot;,就退出<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(&quot;Error:&quot;+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&lt;1){ //判断命令加参数没有<br>
System.out.println(&quot;you forget the name of the server!&quot;);<br>
System.out.println(&quot;see also: myclient yxf&quot;);<br>
System.exit(1); //如果没加参数就退出<br>
}<br>
<br>
Socket socket;<br>
String s=&quot;yxfsoft@263.net&quot;;<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(&quot;client ok&quot;);<br>
System.out.println(&quot;************************************************&quot;);<br>
System.out.println(&quot;&quot;);<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(&quot;you say:&quot;);<br>
s=in.readLine(); //读取用户输入的字符串<br>
PS.println(s); //将读取得字符串传给server<br>
if(s.trim().equals(&quot;BYE&quot;))break; //如果是&quot;BYE&quot;,就退出<br>
else <br>
{<br>
System.out.println(&quot;&quot;);<br>
System.out.println(&quot;please wait server's message...&quot;);<br>
System.out.println(&quot;&quot;);<br>
}<br>
s=DIS.readLine(); //从服务器获得字符串 <br>
System.out.println(&quot;server said:&quot;+s); //打印字符串<br>
if(s.trim().equals(&quot;BYE&quot;))break; //如果是&quot;BYE&quot;,就退出<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(&quot;Error:&quot;+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>

  </table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -