<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 */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:""@宋体";
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 */
@page
{}
@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类都有两个得到输入输出流的方法:getInputStream和getOutputStream。对于Socket类而言,使用getInputStream方法得到的InputStream是从服务端获取数据,而getOutputStream方法得到的OutputStream是向服务端发送数据。而ServerSocket的getInputStream和getOutputStream方法也类似。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 */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:""@宋体";
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 */
@page
{}
@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的地址栏中输入URL:http://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 */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:""@宋体";
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 */
@page
{}
@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请求类型,因此,GET、POST、HEAD等HTTP请求都可以得到回应。在接收客户端请求后,只向客户端输出了一行HTTP响应头信息(包括响应码和HTTP版本号),对于HTTP响应头来说,这一行是必须有的,其他的头字段都是可选的。上面的代码每读一行请求头信息,就向客户端写一行响应信息。最后使用了flush方法将输出缓冲区中的内容发送的客户端。这是必须的,只要使用OutputStream,在最后就必须要调用flush方法(在Socket类中使用OutputStream也是一样)。
下一篇:Java网络编程从入门到精通(27):关闭服务端连接
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!《银河系列原创教程》发布《Java Web开发速学宝典》出版,欢迎定购
分享到:
相关推荐
本教程"Java网络编程从入门到精通"旨在帮助初学者和有经验的开发者深入理解这一领域,从基础知识到高级主题,提供了一套全面的学习资源。 在Java中,网络编程主要涉及以下核心知识点: 1. **Socket编程**:Java的...
### JAVA网络编程从入门到精通知识点详解 #### 一、Internet地址概述 互联网中的每一台设备都需要有一个唯一的标识符——IP地址。当前广泛使用的IPv4地址由四个字节组成,而未来的趋势是采用16个字节的IPv6地址。 ...
- 服务发送数据:服务端在接收到客户端的数据后,根据业务逻辑生成响应,再通过相同的套接字发送回客户端。 5. **源码分析**: - 压缩包内的"易语言服务端客户端互换收发数据源码"应包含了服务端和客户端的实现...
在探讨C# socket编程的过程中,我们首先需要了解的是如何操作IP地址,这是进行网络通信的基础。C#中的IPAddress类提供了方便的方法...对于希望从入门到精通C# socket编程的读者而言,这些内容是必须掌握的核心知识点。
Java网络编程是构建分布式系统的关键技术之一,尤其对于Java初学者来说,理解并掌握客户端和服务端的交互原理至关重要。在本教程中,我们将探讨如何使用Java的`ServerSocket`和`Socket`类来实现基本的网络通信。 ...
- **输入/输出流**:Java的`java.io`包提供了各种流对象,如`InputStream`和`OutputStream`,用于在网络连接中读写数据。发送方将消息转换为字节流并通过Socket发送,接收方则从Socket接收并解析回原始消息。 3. *...
然后,通过`Socket`对象的`getOutputStream()`和`getInputStream()`方法,我们可以获取到用于发送和接收数据的流。 客户端的基本代码结构如下: ```java try (Socket clientSocket = new Socket("localhost", 8080...
java网络编程:控制台输入,服务端代码!
源码中可能包含使用DatagramPacket发送和接收数据包的例子,展示了UDP的简单性和灵活性。 4. **网络数据编码与解码**:在进行网络通信时,数据通常需要被编码为字节流。书中可能涵盖ASCII、ISO-8859-1、UTF-8等字符...
4. **数据传输**:连接建立后,双方可以使用`send()`和`recv()`函数进行数据的发送和接收。TCP提供的是字节流服务,因此需要应用程序自己处理消息边界。 5. **关闭连接**:通信完成后,客户端和服务端都需执行四次...
在这个“易语言客户端与服务端发送图片源码”项目中,我们主要探讨的是如何利用易语言实现跨网络的图片数据传输,包括客户端和服务器端的交互。 客户端是用户操作的界面,它负责发起请求并将图片数据发送到服务端。...
Linux多线程服务端编程:使用muduo+C网络库.pdf Linux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:...
以上是对"java实现snmp数据包发送和接收"这一主题的详细讲解,涵盖了SNMP协议基础、Java实现SNMP的方法、安全性和性能优化等多个方面。通过学习和实践,开发者可以利用Java有效地管理和监控网络设备。
《Java从入门到精通(第四版)》是一本旨在帮助初学者和有一定基础的程序员深入理解Java编程语言的书籍。本书以丰富的实例为引导,旨在让读者通过实践掌握Java的各项核心概念和技术。配套的源代码提供了大量实例,...
- 服务端和客户端都可以使用`Receive()`方法接收数据。这个方法会阻塞直到有数据可读,然后返回接收到的字节数。注意要循环接收,直到所有数据接收完毕,因为每次`Receive()`可能只接收部分数据。 - 数据接收后,...
《Java从入门到精通》是一本全面覆盖Java编程语言的学习指南,由知名讲师韩顺平编著。本书旨在帮助初学者快速掌握Java编程基础,并逐步深入到高级特性,实现从零基础到熟练应用的转变。标签“java”、“入门”和...
3. **输入/输出流**:讲解在Java中如何处理网络数据的发送与接收,包括字节流和字符流,以及缓冲流、对象流和数据流的使用,如何通过流进行网络数据的序列化和反序列化。 4. **异步网络编程**:介绍Java NIO(非...
在IT领域,服务端和客户端通信是网络编程的基础,它涉及到如何通过网络协议进行数据交换。本主题聚焦于使用Java和C++这两种编程语言来实现这一功能。Java和C++都是广泛使用的编程语言,尤其适合处理系统级和网络编程...
每个报文的发送和接收都依赖于`InputStream`和`OutputStream`对象,它们分别用于读取和写入网络数据。在实际应用中,可能需要对报文进行更复杂的编码和解码,例如JSON或XML格式,以便传输更复杂的数据结构。 总结来...