`
seara
  • 浏览: 648540 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java网络编程从入门到精通(26):在服务端接收和发送数据

阅读更多
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="ProgId" content="Word.Document"> <meta name="Generator" content="Microsoft Word 11"> <meta name="Originator" content="Microsoft Word 11"> <link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"> <!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><style> <!-- /* Font Definitions */ &#64;font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1;} &#64;font-face {font-family:""&#64;宋体"; panose-1:2 1 6 0 3 1 1 1 1 1;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; font-size:10.5pt; font-family:"Times New Roman";} /* Page Definitions */ &#64;page {} &#64;page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} </style> <![endif]-->

本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇:Java网络编程从入门到精通(25):创建ServerSocket对象

在建立完ServerSocket对象后,通过accept方法返回的Socket对象,服务端就可以和客户端进行数据交互。

Socket类和ServerSocket类都有两个得到输入输出流的方法:getInputStreamgetOutputStream。对于Socket类而言,使用getInputStream方法得到的InputStream是从服务端获取数据,而getOutputStream方法得到的OutputStream是向服务端发送数据。而ServerSocketgetInputStreamgetOutputStream方法也类似。InputStream从客户端读取数据,OutputStream向客户端发送数据。下面的代码是一个接收HTTP请求,并返回HTTP请求头信息的程序,它演示了ServerSocket类如何读取和发送来自客户端的数据。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package server;

importjava.net.*;
importjava.io.*;

publicclassHttpEchoServerextendsThread
{
privateSocketsocket;
publicvoidrun()
{
try
{
InputStreamReaderisr
=newInputStreamReader(socket
.getInputStream());
BufferedReaderbr
=newBufferedReader(isr);
OutputStreamWriterosw
=newOutputStreamWriter(socket
.getOutputStream());
osw.write(
"HTTP/1.1200OK\r\n\r\n");
Strings
="";
while(!(s=br.readLine()).equals(""))
osw.write(
"<html><body>"+s+"<br></body></html>");
osw.flush();
socket.close();
}
catch(Exceptione)
{
}
}
publicHttpEchoServer(Socketsocket)
{
this.socket=socket;
}
publicstaticvoidmain(String[]args)throwsException
{
ServerSocketserverSocket
=newServerSocket(8888);
System.out.println(
"服务器已经启动,端口:8888");
while(true)
{
Socketsocket
=serverSocket.accept();
newHttpEchoServer(socket).start();
}
}
}

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><style> <!-- /* Font Definitions */ &#64;font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1;} &#64;font-face {font-family:""&#64;宋体"; panose-1:2 1 6 0 3 1 1 1 1 1;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; font-size:10.5pt; font-family:"Times New Roman";} /* Page Definitions */ &#64;page {} &#64;page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} </style> <![endif]-->

编译并运行HttpEchoServer后,在IE的地址栏中输入URLhttp://localhost:8888。输出结果如图1所示。


图1
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="ProgId" content="Word.Document"> <meta name="Generator" content="Microsoft Word 11"> <meta name="Originator" content="Microsoft Word 11"> <link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"> <!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><style> <!-- /* Font Definitions */ &#64;font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1;} &#64;font-face {font-family:""&#64;宋体"; panose-1:2 1 6 0 3 1 1 1 1 1;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; font-size:10.5pt; font-family:"Times New Roman";} /* Page Definitions */ &#64;page {} &#64;page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} </style> <![endif]-->

上面的代码并未验证HTTP请求类型,因此,GETPOSTHEADHTTP请求都可以得到回应。在接收客户端请求后,只向客户端输出了一行HTTP响应头信息(包括响应码和HTTP版本号),对于HTTP响应头来说,这一行是必须有的,其他的头字段都是可选的。上面的代码每读一行请求头信息,就向客户端写一行响应信息。最后使用了flush方法将输出缓冲区中的内容发送的客户端。这是必须的,只要使用OutputStream,在最后就必须要调用flush方法(Socket类中使用OutputStream也是一样)

下一篇:
Java网络编程从入门到精通(27):关闭服务端连接



国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

分享到:
评论

相关推荐

    Java网络编程从入门到精通

    本教程"Java网络编程从入门到精通"旨在帮助初学者和有经验的开发者深入理解这一领域,从基础知识到高级主题,提供了一套全面的学习资源。 在Java中,网络编程主要涉及以下核心知识点: 1. **Socket编程**:Java的...

    JAVA网络编程从入门到精通

    ### JAVA网络编程从入门到精通知识点详解 #### 一、Internet地址概述 互联网中的每一台设备都需要有一个唯一的标识符——IP地址。当前广泛使用的IPv4地址由四个字节组成,而未来的趋势是采用16个字节的IPv6地址。 ...

    易语言服务端客户端互换收发数据

    - 服务发送数据:服务端在接收到客户端的数据后,根据业务逻辑生成响应,再通过相同的套接字发送回客户端。 5. **源码分析**: - 压缩包内的"易语言服务端客户端互换收发数据源码"应包含了服务端和客户端的实现...

    C#socket编程从入门到精通

    在探讨C# socket编程的过程中,我们首先需要了解的是如何操作IP地址,这是进行网络通信的基础。C#中的IPAddress类提供了方便的方法...对于希望从入门到精通C# socket编程的读者而言,这些内容是必须掌握的核心知识点。

    java网络编程客户端和服务端

    Java网络编程是构建分布式系统的关键技术之一,尤其对于Java初学者来说,理解并掌握客户端和服务端的交互原理至关重要。在本教程中,我们将探讨如何使用Java的`ServerSocket`和`Socket`类来实现基本的网络通信。 ...

    java 网上聊天(发送方发送数据,接收方能够接到,反之亦然)

    - **输入/输出流**:Java的`java.io`包提供了各种流对象,如`InputStream`和`OutputStream`,用于在网络连接中读写数据。发送方将消息转换为字节流并通过Socket发送,接收方则从Socket接收并解析回原始消息。 3. *...

    java socket网络编程代码(服务端和客户端)

    然后,通过`Socket`对象的`getOutputStream()`和`getInputStream()`方法,我们可以获取到用于发送和接收数据的流。 客户端的基本代码结构如下: ```java try (Socket clientSocket = new Socket("localhost", 8080...

    java网络编程服务端

    java网络编程:控制台输入,服务端代码!

    java网络编程源码

    源码中可能包含使用DatagramPacket发送和接收数据包的例子,展示了UDP的简单性和灵活性。 4. **网络数据编码与解码**:在进行网络通信时,数据通常需要被编码为字节流。书中可能涵盖ASCII、ISO-8859-1、UTF-8等字符...

    TCP 客户端 服务端 网络编程

    4. **数据传输**:连接建立后,双方可以使用`send()`和`recv()`函数进行数据的发送和接收。TCP提供的是字节流服务,因此需要应用程序自己处理消息边界。 5. **关闭连接**:通信完成后,客户端和服务端都需执行四次...

    易语言客户端与服务端发送图片源码

    在这个“易语言客户端与服务端发送图片源码”项目中,我们主要探讨的是如何利用易语言实现跨网络的图片数据传输,包括客户端和服务器端的交互。 客户端是用户操作的界面,它负责发起请求并将图片数据发送到服务端。...

    Linux多线程服务端编程:使用muduo+C网络库

    Linux多线程服务端编程:使用muduo+C网络库.pdf Linux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:...

    java实现snmp数据包发送和接收资料

    以上是对"java实现snmp数据包发送和接收"这一主题的详细讲解,涵盖了SNMP协议基础、Java实现SNMP的方法、安全性和性能优化等多个方面。通过学习和实践,开发者可以利用Java有效地管理和监控网络设备。

    Java从入门到精通(第四版)官方程序实例

    《Java从入门到精通(第四版)》是一本旨在帮助初学者和有一定基础的程序员深入理解Java编程语言的书籍。本书以丰富的实例为引导,旨在让读者通过实践掌握Java的各项核心概念和技术。配套的源代码提供了大量实例,...

    SOCKET写服务端和客户端的发送和接收

    - 服务端和客户端都可以使用`Receive()`方法接收数据。这个方法会阻塞直到有数据可读,然后返回接收到的字节数。注意要循环接收,直到所有数据接收完毕,因为每次`Receive()`可能只接收部分数据。 - 数据接收后,...

    java从入门到精通

    《Java从入门到精通》是一本全面覆盖Java编程语言的学习指南,由知名讲师韩顺平编著。本书旨在帮助初学者快速掌握Java编程基础,并逐步深入到高级特性,实现从零基础到熟练应用的转变。标签“java”、“入门”和...

    java网络编程 PPT

    3. **输入/输出流**:讲解在Java中如何处理网络数据的发送与接收,包括字节流和字符流,以及缓冲流、对象流和数据流的使用,如何通过流进行网络数据的序列化和反序列化。 4. **异步网络编程**:介绍Java NIO(非...

    服务端和客户端,java,C++实现代码

    在IT领域,服务端和客户端通信是网络编程的基础,它涉及到如何通过网络协议进行数据交换。本主题聚焦于使用Java和C++这两种编程语言来实现这一功能。Java和C++都是广泛使用的编程语言,尤其适合处理系统级和网络编程...

    Socket服务端客户端以tcp/ip协议发送接收报文

    每个报文的发送和接收都依赖于`InputStream`和`OutputStream`对象,它们分别用于读取和写入网络数据。在实际应用中,可能需要对报文进行更复杂的编码和解码,例如JSON或XML格式,以便传输更复杂的数据结构。 总结来...

Global site tag (gtag.js) - Google Analytics