设为首页收藏本站language 语言切换
查看: 1949|回复: 0
收起左侧

Java网络编程 在服务端接收和发送数据

[复制链接]
发表于 2010-2-20 15:02:39 | 显示全部楼层 |阅读模式
<p >在建立完ServerSocket对象后,通过accept方法返回的Socket对象,服务端就可以和客户端进行数据交互。<p ><p >Socket类和ServerSocket类都有两个得到输入输出流的方法:getInputStream和getOutputStream。对于Socket类而言,使用getInputStream方法得到的InputStream是从服务端获取数据,而getOutputStream方法得到的OutputStream是向服务端发送数据。而ServerSocket的getInputStream和getOutputStream方法也类似。InputStream从客户端读取数据,OutputStream向客户端发送数据。下面的代码是一个接收HTTP请求,并返回HTTP请求头信息的程序,它演示了ServerSocket类如何读取和发送来自客户端的数据。<p ><p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>package server;import java.net.*;import java.io.*;public class HttpEchoServer extends Thread{    private Socket socket;    public void run()    {        try        {            InputStreamReader isr = new InputStreamReader(socket                            .getInputStream());            BufferedReader br = new BufferedReader(isr);            OutputStreamWriter osw = new OutputStreamWriter(socket                            .getOutputStream());            osw.write(&quot;HTTP/1.1 200 OK\r\n\r\n&quot;);            String s = &quot;&quot;;            while (!(s = br.readLine()).equals(&quot;&quot;))                osw.write(&quot;&lt;html&gt;&lt;body&gt;&quot; + s + &quot;&lt;br&gt;&lt;/body&gt;&lt;/html&gt;&quot;);            osw.flush();            socket.close();        }        catch (Exception e)        {        }    }    public HttpEchoServer(Socket socket)    {        this.socket = socket;    }    public static void main(String[] args) throws Exception    {        ServerSocket serverSocket = new ServerSocket(8888);        System.out.println(&quot;服务器已经启动,端口:8888&quot;);        while (true)        {            Socket socket = serverSocket.accept();            new HttpEchoServer(socket).start();        }    }}</ccid_code></pre></td></tr></table></ccid_nobr><br><p ><p >编译并运行HttpEchoServer后,在IE的地址栏中输入URL:http://localhost:8888。输出结果如图1所示。<p ><p ><center><img  src="http://www.hh010.com/upload_files/article/243/9_pzkasr1860887.jpg"></center><p ><center>图 1</center><p ><p >上面的代码并未验证HTTP请求类型,因此,GET、POST、HEAD等HTTP请求都可以得到回应。在接收客户端请求后,只向客户端输出了一行HTTP响应头信息(包括响应码和HTTP版本号),对于HTTP响应头来说,这一行是必须有的,其他的头字段都是可选的。上面的代码每读一行请求头信息,就向客户端写一行响应信息。最后使用了flush方法将输出缓冲区中的内容发送的客户端。这是必须的,只要使用OutputStream,在最后就必须要调用flush方法(在Socket类中使用OutputStream也是一样)。<p ><p >< align=right></P><p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-6 02:09 , Processed in 0.063763 second(s), 22 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表