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

📄 right8_3_9.htm

📁 清华JAVA教程。不用多说了吧
💻 HTM
字号:
<html><head><title>JAVA编程语言</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="../../../css/text.css" type="text/css"></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" ><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">  <tr>     <td valign="top">       <table width="97%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" align="center">        <tr>          <td height="244" valign="top">             <p class="pt9-black">  <span class="zhongdian">1. 客户端程序:MultiTalkClient.java</span><a name="01"></a><br>              <br>                import java.io.*;<br>                import java.net.*;<br>                public class MultiTalkClient {<br>                 public static void main(String args[]) {<br>                  try{<br>                    Socket socket=new Socket(&quot;127.0.0.1&quot;,4700); <br>                    <font color="339900">//向本机的4700端口发出客户请求</font><br>                    BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));<br>                    <font color="339900">//由系统标准输入设备构造BufferedReader对象</font><br>                    PrintWriter os=new PrintWriter(socket.getOutputStream());<br>                    <font color="339900">//由Socket对象得到输出流,并构造PrintWriter对象</font><br>                    BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));<br>                    <font color="339900">//由Socket对象得到输入流,并构造相应的BufferedReader对象</font><br>                    String readline;<br>                    readline=sin.readLine(); <font color="339900">//从系统标准输入读入一字符串</font><br>                    while(!readline.equals(&quot;bye&quot;)){ <br>                    <font color="339900">//若从标准输入读入的字符串为 &quot;bye&quot;则停止循环</font><br>                      os.println(readline); <br>                      <font color="339900">//将从系统标准输入读入的字符串输出到Server</font><br>                      os.flush(); <font color="339900"><br>                      //刷新输出流,使Server马上收到该字符串</font><br>                      System.out.println(&quot;Client:&quot;+readline); <br>                      <font color="339900">//在系统标准输出上打印读入的字符串</font><br>                      System.out.println(&quot;Server:&quot;+is.readLine()); <br>                      <font color="339900">//从Server读入一字符串,并打印到标准输出上</font><br>                      readline=sin.readLine(); <font color="339900"><br>                      //从系统标准输入读入一字符串</font><br>                    } <font color="339900">//继续循环</font><br>                    os.close(); <font color="339900">//关闭Socket输出流</font><br>                    is.close(); <font color="339900">//关闭Socket输入流</font><br>                    socket.close(); <font color="339900">//关闭Socket</font><br>                  }catch(Exception e) {<br>                    System.out.println(&quot;Error&quot;+e); <font color="339900">//出错,则打印出错信息</font><br>                  }<br>                }<br>              }<br>              <br>               <span class="zhongdian">2. 服务器端程序: MultiTalkServer.java<a name="02"></a></span><br>              <br>                import java.io.*;<br>                import java.net.*;<br>                import ServerThread;<br>                public class MultiTalkServer{<br>                 static int clientnum=0; <font color="339900">//静态成员变量,记录当前客户的个数</font><br>                 public static void main(String args[]) throws IOException {<br>                  ServerSocket serverSocket=null;<br>                  boolean listening=true;<br>                  try{<br>                    serverSocket=new ServerSocket(4700); <br>                    <font color="339900">//创建一个ServerSocket在端口4700监听客户请求</font><br>                  }catch(IOException e) {<br>                    System.out.println(&quot;Could not listen on port:4700.&quot;);               <br>                    //出错,打印出错信息<br>                    System.exit(-1); <font color="339900">//退出</font><br>                  }<br>                  while(listening){ <font color="339900">//永远循环监听</font><br>                    new ServerThread(serverSocket.accept(),clientnum).start();<br>                    <font color="339900">//监听到客户请求,根据得到的Socket对象和<br>                     客户计数创建服务线程,并启动之</font><br>                    clientnum++; <font color="339900">//增加客户计数</font><br>                  }<br>                  serverSocket.close(); <font color="339900">//关闭ServerSocket</font><br>                }<br>              }</p>            <p class="pt9-black"> <span class="zhongdian">3. 程序ServerThread.java<a name="03"></a></span><br>              <br>                import java.io.*;<br>                import java.net.*;<br>                public class ServerThread extends Thread{<br>                 Socket socket=null; <font color="339900">//保存与本线程相关的Socket对象</font><br>                 int clientnum; <font color="339900">//保存本进程的客户计数</font><br>                 public ServerThread(Socket socket,int num) { <font color="339900">//构造函数</font><br>                  this.socket=socket; <font color="339900">//初始化socket变量</font><br>                  clientnum=num+1; <font color="339900">//初始化clientnum变量</font><br>                 }<br>                 public void run() { <font color="339900">//线程主体</font><br>                  try{<br>                    String line;<br>                    BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));<br>                <font color="339900">//由Socket对象得到输入流,并构造相应的BufferedReader对象</font><br>                    PrintWriter os=newPrintWriter(socket.getOutputStream());<br>                    <font color="339900">//由Socket对象得到输出流,并构造PrintWriter对象</font><br>                    BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));<br>                    <font color="339900">//由系统标准输入设备构造BufferedReader对象</font><br>                    System.out.println(&quot;Client:&quot;+ clientnum +is.readLine());<br>                    <font color="339900">//在标准输出上打印从客户端读入的字符串</font><br>                    line=sin.readLine(); <br>                    <font color="339900">//从标准输入读入一字符串</font><br>                    while(!line.equals(&quot;bye&quot;)){ <br>                    <font color="339900">//如果该字符串为 &quot;bye&quot;,则停止循环</font><br>                      os.println(line); <br>                      <font color="339900">//向客户端输出该字符串</font><br>                      os.flush(); <br>                      <font color="339900">//刷新输出流,使Client马上收到该字符串</font><br>                      System.out.println(&quot;Server:&quot;+line); <br>                      <font color="339900">//在系统标准输出上打印该字符串</font><br>                      System.out.println(&quot;Client:&quot;+ clientnum +is.readLine());<br>                      <font color="339900">//从Client读入一字符串,并打印到标准输出上</font><br>                      line=sin.readLine(); <br>                      <font color="339900">//从系统标准输入读入一字符串</font><br>                    } <font color="339900">//继续循环</font><br>                    os.close(); <font color="339900">//关闭Socket输出流</font><br>                    is.close(); <font color="339900">//关闭Socket输入流</font><br>                    socket.close(); <font color="339900">//关闭Socket</font><br>                    server.close(); <font color="339900">//关闭ServerSocket</font><br>                   }catch(Exception e){<br>                    System.out.println(&quot;Error:&quot;+e); <br>                    <font color="339900">//出错,打印出错信息</font><br>                   }<br>                 }<br>               }<br>              <br>                这个程序向读者展示了网络应用中最为典型的C/S结构,我们可以用下面的图来描述这样一种模型:<br>              <img src="../../../images/tu/ch08/8_3_10.gif" width="440" height="360">               <br>              <br>                <font color="000099">通过以上的学习,读者应该对Java的面向流的网络编程有了一个比较全面的认识,这些都是基于TCP的应用,后面我们将介绍基于UDP的Socket编程。</font></p>            </td>        </tr>      </table>    </td>  </tr></table></body></html>

⌨️ 快捷键说明

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