• 大小: 20.52MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-18
  • 语言: Html/CSS
  • 标签: html5  

资源简介

疯狂HTML5CSS3JavaScript讲义_源码

资源截图

代码片段和文件信息

import java.io.*;
import java.net.*;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.util.regex.*;
import java.util.*;

import sun.misc.base64Encoder;

/**
 * Description:
 * 
网站: 疯狂Java联盟
 * 
Copyright (C) 2001-2012 Yeeku.H.Lee
 * 
This program is protected by copyright laws.
 * 
Program Name:
 * 
Date:
 * @author Yeeku.H.Lee kongyeeku@163.com
 * @version 1.0
 */
public class ChatServer
{
// 记录所有的客户端Soccket
public static List clientSockets
= new ArrayList();
public ChatServer()throws IOException
{
// 创建ServerSocket,准备接受客户端连接
ServerSocket ss = new ServerSocket(30000);
while(true)
{
// 接收到客户端连接
Socket socket = ss.accept();
// 将客户端Socket添加到clientSockets集合中
clientSockets.add(socket);
// 启动线程
new ServerThread(socket).start();
}
}
public static void main(String[] args)
throws Exception
{
new ChatServer();
}
}
class ServerThread extends Thread
{
private Socket socket;
public ServerThread(Socket socket)
{
this.socket = socket;
}
public void run()
{
try
{
// 得到Socket对应的输入流
InputStream in = socket.getInputStream();
// 得到Socket对应的输出流
OutputStream out = socket.getOutputStream();
byte[] buff = new byte[1024];
String req = ““;
// 读取数据,此时建立与WebSocket的“握手“。
int count = in.read(buff);
// 如果读取的数据长度大于0
if(count > 0)
{
// 将读取的数据转化为字符串
req = new String(buff  0  count);
System.out.println(“握手请求:“ + req);
// 获取WebSocket的key
String secKey = getSecWebSocketKey(req);
System.out.println(“secKey = “ + secKey);
String response = “HTTP/1.1 101 Switching Protocols\r\nUpgrade: “
+ “websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: “
+ getSecWebSocketAccept(secKey) + “\r\n\r\n“;
System.out.println(“secAccept = “ + getSecWebSocketAccept(secKey));
out.write(response.getBytes());
}
int hasRead = 0;
// 不断读取WebSocket发送过来的数据
while((hasRead = in.read(buff)) > 0)
{
System.out.println(“接收的字节数:“ + hasRead);
/*
因为WebSocket发送过来的数据遵循了一定的协议格式,
其中第3个~第6个字节是数据掩码。
从第7个字节开始才是真正的有效数据。
因此程序使用第3个~第6个字节对后面的数据进行了处理
*/
for (int i = 0 ; i < hasRead - 6 ; i++ )
{
buff[i + 6] = (byte) (buff[i % 4 + 2] ^ buff[i + 6]);
}
// 获得从浏览器发送过来的数据
String pushMsg = new String(buff
 6  hasRead - 6  “UTF-8“);
// 遍历Socket集合,依次向每个Socket发送数据
for (Iterator it = ChatServer.clientSockets.iterator()
; it.hasNext() ;)
{
try
{
Socket s = it.next();
// 发送数据时,第一个字节必须与读到的第一个字节相同
byte[] pushHead = new byte[2];
pushHead[0] = buff[0];
// 发送数据时,第二个字节记录发送数据的长度
pushHead[1] = (byte) pushMsg.getBytes(“UTF-8“).length;
// 发送前两个字节
s.getOutputStream().write(pushHead);
// 发送有效数据
s.getOutputStream().write(pushMsg.get

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-08-17 20:51  01\
     目录           0  2013-08-17 20:51  01\1.1\
     文件          75  2012-01-10 16:36  01\1.1\bad.html
     文件          86  2012-01-10 16:22  01\1.1\qs.html
     目录           0  2013-08-17 20:51  01\1.2\
     文件         318  2012-01-12 18:28  01\1.2\autofocus.html
     文件         616  2012-01-12 18:33  01\1.2\focus.html
     目录           0  2013-08-17 20:51  01\1.3\
     文件         113  2012-01-12 00:16  01\1.3\missTag.html
     目录           0  2013-08-17 20:51  01\1.3\my images\
     文件       22620  2011-11-02 22:52  01\1.3\my images\android.png
     文件        5632  2012-04-27 14:23  01\1.3\my images\Thumbs.db
     文件         252  2012-01-11 23:45  01\1.3\noCase.html
     文件         394  2012-01-12 16:59  01\1.3\noQuote.html
     文件         276  2012-01-13 12:56  01\1.3\noQuoteError.html
     文件         338  2012-01-12 16:29  01\1.3\proptest.html
     目录           0  2013-08-17 20:51  02\
     目录           0  2013-08-17 20:51  02\2.1\
     文件         643  2012-02-23 09:32  02\2.1\anchor.html
     文件         821  2012-01-13 13:10  02\2.1\basic.html
     文件         297  2012-01-13 16:17  02\2.1\iframe.html
     目录           0  2013-08-17 20:51  02\2.1\images\
     文件       35767  2008-06-17 12:15  02\2.1\images\logo.jpg
     文件         865  2012-01-13 13:47  02\2.1\img.html
     文件         808  2012-01-13 16:23  02\2.1\list.html
     文件        1948  2012-02-23 09:10  02\2.1\semantic.html
     文件         497  2012-01-13 15:01  02\2.1\simpleTable.html
     文件         512  2012-01-13 15:05  02\2.1\tablespan.html
     文件         645  2012-01-13 15:17  02\2.1\tablewithbody.html
     文件        1075  2012-01-13 15:58  02\2.1\tablewithcol.html
     文件         762  2012-01-13 13:24  02\2.1\text.html
............此处省略526个文件信息

评论

共有 条评论