- 浏览: 491544 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (234)
- aom学习 (7)
- 2007 (19)
- Java基础 (58)
- spring (7)
- linux (4)
- VMware (3)
- 网络 (3)
- 开发工具类 (14)
- webservices (2)
- 其他 (14)
- database (16)
- hibernate (8)
- jsp_html (14)
- jbpm (5)
- jquery (1)
- 办公软件 (6)
- struts2(webwork) (6)
- web服务器 (2)
- 项目管理 (7)
- 编程规范 (1)
- ps (2)
- JAVA工具类API (4)
- sun_java1.6 (6)
- 金融ISO8583 (1)
- SFTP (1)
- android (1)
- Linux_ftp_命令行下下载文件get与上传文件put的命令应用 (1)
- 公钥+私钥 (1)
- jvm (1)
最新评论
-
fyw2011_huawei:
有没有办法让谷歌也实现该功能? 因为在谷歌上调试时windo ...
window之createPopup方法 -
技术求:
好,flush 时才是execute
浅谈Hibernate的flush机制 -
xyzc2011:
言简意赅
公钥+私钥 -
smith789:
...
Windows 不能在 本地计算机 启动 OracleDBConsoleorcl -
zengshaotao:
肯定,因为要用到
jquery.js与自己的扩展的.js在导入时有先后顺序
2006.10.14 晴
HTTP服务器,利用了线程可以实现多人的访问,代码是COPY过来了,可还是一知半解,另外还有UDP编程,和多播编程.其中主要用到了DatagramSocket,DatagramPacket, MulticastSocket ,InetAddress等类.
下面是今天的代码:
1.http服务器
public class HttpServer {
public void startServer() {
ServerSocket ss;
try {
ss = new ServerSocket(81);// 创建一个Server套接字并绑定端口
while (true) {
Socket socket = ss.accept();//侦听并接受到此套接字的连接,并返回新套接字
// 启动谈话线程
HttpSession session = new HttpSession(socket);
Thread thread = new Thread(session);
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
HttpServer server = new HttpServer();
server.startServer();
}
}
public class HttpSession implements Runnable {
public static final String PATH_NAME = "F:\\网站资料\\" ;
private Socket socket;
public HttpSession(Socket socket){
this.socket = socket ;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
OutputStream out = socket.getOutputStream();
String line = "";
while( (line = reader.readLine()) != null){
if(line.length() <= 4) continue;
int start = line.indexOf(" ");
int end = line.lastIndexOf(" ");
if(start <= 0 || end <= 0 || start >= end)
continue ;
String cmd = line.substring(0, start).toUpperCase();
if(cmd != null && cmd.equals("GET")){
String fileName = line.substring(start + 2, end);
String version = line.substring(end + 1);
doGet(out, fileName) ;
}
System.out.println(line);
}
out.close();
reader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void printOkResponse(OutputStream out, File file){
PrintWriter pw = new PrintWriter(out) ;
pw.println("HTTP/1.1 200 OK");
pw.println("Server: Apache-Coyote/1.1");
pw.println("ETag: W/\"6381-1144994988000\"");
pw.println("Last-Modified: Fri, 14 Apr 2006 06:09:48 GMT");
pw.println("Content-Type: text/plain");
pw.println("Content-Length: " + file.length());
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.FULL);
pw.println(df.format(new Date()));
pw.println("Connection: keep-alive");
pw.println("");
pw.flush();
}
private void doGet(OutputStream out, String fileName){
File file = new File(PATH_NAME + fileName);
printOkResponse(out, file) ;
InputStream fis;
try {
fis = new FileInputStream(file);
byte[] buff = new byte[1024];
int len = 0;
while((len = fis.read(buff) ) != -1){
out.write(buff, 0, len);
}
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.UDP编程:
public class UDPClient {
public void uDPReceive() {
try {
DatagramSocket socket = new DatagramSocket(8989);//声明本机的一个指定端口的UDP数据接收包
while (true) {
byte buffer[] = new byte[256];
DatagramPacket packet = new DatagramPacket(buffer,
buffer.length);//
socket.receive(packet);
System.out.write(packet.getData(), 0, packet.getData().length);
System.out.println();
Thread.sleep(500);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
UDPClient udpclient = new UDPClient();
udpclient.uDPReceive();
}
}
public class UDPServer {
public void uDPSend() {
try {
DatagramSocket socket = new DatagramSocket();// 声明一个UDP用途的套接字
while (true) {
byte buffer[] = new byte[256];
buffer = new Date().toString().getBytes();// 得到本地时间
InetAddress address = InetAddress.getLocalHost();// 得到本机的address
DatagramPacket packet = new DatagramPacket(buffer,
buffer.length, address, 8989);// 得到带有目的IP的UDP数据包
socket.send(packet);// 发送UDP数据包
}
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
UDPServer udpserver = new UDPServer();
udpserver.uDPSend();
}
}
3.多播编程:
public class UDPClient {
public void uDPReceive() {
try {
MulticastSocket socket = new MulticastSocket(6789);// 创建多播套接字并将其绑定到特定端口
InetAddress group=InetAddress.getByName("228.5.6.7");//创建一个多播组
socket.joinGroup(group);//加入多播组
while (true) {
byte buffer[] = new byte[256];
DatagramPacket packet = new DatagramPacket(buffer,
buffer.length);// DatagramPacket主要是负责DatagramSocket的发送和接收
socket.receive(packet);
System.out.write(packet.getData(), 0, packet.getData().length);
System.out.println();
Thread.sleep(500);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
UDPClient udpclient = new UDPClient();
udpclient.uDPReceive();
}
}
public class UDPServer {
public void uDPSend() {
try {
MulticastSocket socket = new MulticastSocket(6789);// 创建多播套接字并将其绑定到特定端口
InetAddress group=InetAddress.getByName("228.5.6.7");//创建一个多播组
socket.joinGroup(group);//加入多播组
while (true) {
byte buffer[] = new byte[256];
buffer = new Date().toString().getBytes();// 得到本地时间
DatagramPacket packet = new DatagramPacket(buffer,
buffer.length,group,6789);// 创建带有多播组的UDP数据包
socket.send(packet);// 发送UDP多播数据包
Thread.sleep(500);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
UDPServer udpserver = new UDPServer();
udpserver.uDPSend();
}
}
发表评论
文章已被作者锁定,不允许评论。
-
多线程环境下使用log4j输出各线程的标识
2012-08-15 16:43 1869多线程环境下使用log4j输出各线程的标识 -
证书导入导出
2011-01-16 11:30 1406导入导出命令示例:证书导入:keytool -import - ... -
BigDecimal使用
2010-06-30 12:02 1442public static void main(Str ... -
org.apache.commons.collections.CollectionUtils.filter
2010-06-17 16:11 1710org.apache.commons.coll ... -
Eclipse is running in a JRE, but a JDK is required
2010-05-22 03:47 1238Eclipse is running in a JRE, b ... -
基于StringTemplate的视图
2010-04-21 15:51 1295基于StringTemplate的视图 一 String ... -
JAVA中数组
2010-04-18 23:53 13691、数组不是集合,它只能保存同种类型的多个原始类型或者对象的引 ... -
Java中String类的方法及说明
2010-04-18 23:26 866http://blog.sina.com.cn/s/blog_ ... -
math.ceil round floor
2010-04-18 23:15 1177Math.ceil(x):比x大(或X相等)的最小 doub ... -
使用java.util.concurrent实现的线程池、消息队列功能
2010-04-18 22:47 2312ThreadPoolManager类:负责管理线程池,调用轮询 ... -
5.0新特性:
2010-04-09 16:58 10705.0新特性:前提:1. JVM没有变, 编译器改变 ... -
什么是线程安全?
2010-04-07 03:25 1868什么是线程安全? 如果你的代码所在的进程中有多个线程在同时 ... -
elipse工作空间中的.metadata
2010-03-26 16:44 1218有时在用eclipse开发时,可能会使编辑器出现异常,这 ... -
BEA WebLogic 9.2平台加速部署Web服务应用
2010-02-23 09:03 2179作为业界知名的Java企业版(JEE)应用基础架构平台,BEA ... -
读内存还是存文件然后读文件
2010-01-28 17:15 1119读内存还是存文件然后读文件,一般优先于读内存为好。 -
spring配置文件名称的最好按java规范进行编写
2010-01-19 09:33 1442spring配置文件名称的最好按java规范进行编写 ... -
Eclipse中安装svn插件Subversive
2010-01-08 11:25 2896最简单的方法是通过Eclipse的插件自动下载和更新功能。 ... -
接口,抽象类
2009-12-02 17:09 1120接口定义了其实现应提供的行为特征 比如 Java code ... -
java基础_容易出错的知识点!
2009-11-30 00:23 1091------------------------------- ... -
java基础_传值与传址方法调用
2009-11-25 02:15 3018public class PassTest { publi ...
相关推荐
这里提到的"core-2.3.0 + QRCode + zxing-1.6-core + zxing-j2se-1.7"组合,是与二维码处理相关的Java库集合。下面我们将详细探讨这些组件以及它们在实际开发中的应用。 首先,"core-2.3.0"可能指的是某个项目的...
jaxmpp-j2se-3.0.0.jar(XMPP/Tigase开发,java代码类型客户端使用的jar包) 需要的朋友自己下载,一个朋友让我帮他找的,就顺便发出来给更多需要的朋友吧
资源名称:Java-J2se、J2ee开发全程视频教程和源码(87集)资源目录:【】Java-J2se-J2ee全程教程(01-10)【】Java-J2se-J2ee全程教程(11-20)【】Java-J2se-J2ee全程教程(21-30)【】Java-J2se-J2ee全程教程(31...
《J2SE-孙鑫授课总结的PPT》是一份深度总结Java标准版(Java 2 Platform, Standard Edition,简称J2SE)核心知识的教学资料,由知名IT教育专家孙鑫精心编撰。这份PPT涵盖了Java SE的各个方面,旨在帮助学习者系统地...
这份名为“j2se-doc-cn”的压缩包包含的是Java API的中文版,对于中国开发者来说,无疑极大地便利了理解和使用Java语言。 在Java API文档中,你可以找到关于类库的详细信息,这些类库构成了Java开发的基础。例如,`...
zxing-j2se-1.7[用于编解二维码].7z"压缩包包含的是ZXing项目的1.7版本,专门针对Java平台的版本,主要用途是处理二维码的编码和解码工作。 首先,我们来了解下ZXing的核心组件——zxing-core-1.7.jar。这个JAR文件...
本文将深入探讨在给定的压缩包中涉及的几个关键组件:`core-3.3.3`, `javase-3.3.3`, `zxing-1.7-core` 和 `zxing-j2se-1.7`,以及与之相关的JDK版本,包括JDK1.7和JDK1.8。这些组件主要用于二维码生成和处理,对于...
标题“j2se-server.rar_connect”暗示我们关注的是Java SE(标准版)服务器端的连接技术,特别是与移动设备交互的代码。描述中提到的"connect mobile javacode"进一步明确了我们要探讨的是如何使用Java来实现移动...
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
本项目"j2se-Music"显然是基于J2SE实现的一个音乐管理系统的雏形,主要功能包括音乐信息的增加、删除、修改和查询。这个系统可能是一个控制台应用程序,用户通过命令行界面与之交互。 首先,让我们深入了解一下"增...
javase 的api文档 学习java最基本的东西 大家应该都懂得
jar包,官方版本,自测可用