Scoket通信属于网络底层通信 ,它是网络编程中最常用的概念和工具。在TCP/IP网络中 ,由于使用Scoket,能够在网络中处理复杂数据 ,所以在各种网络应用程序中 ,涉及到数据传送和接收 ,一般都会使用Scoket。
大家都知道flash scoket 通讯会用到843安全端口,以下是一个简单的例子,传统方法。
1.java端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 游戏843安全端口服务器,用来处理flash socket访问权限请求
* @author hxc
* */
public class Server843 extends Thread {
private static ServerSocket server;//
static final int BINDPORT = 843;//安全端口
private static boolean en = true;
public void run() {
try {
server = new ServerSocket(BINDPORT);//建立一个服务端
} catch (IOException e) {
e.printStackTrace();
}
while (en) {
Socket socket;
try {
socket = server.accept();//等待连接请求
new MyThread(socket).start();//处理连接请求
} catch (IOException e) {
e.printStackTrace();
}
}
}
class MyThread extends Thread {
private Socket socket;
public MyThread(Socket socket) {
this.socket = socket;
}
public void run() {
String xml = "<cross-domain-policy>"
+ "<allow-access-from domain=\"*\" to-ports=\"*\"/>"
+ "</cross-domain-policy>";
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream(), "utf8"));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
char[] by = new char[22];
br.read(by, 0, 22);//等待对方请求策略文件权限
String head = new String(by);
if (head.equals("<policy-file-request/>")) {//请求的连接内容是策略文件权限
pw.print(xml + "\0");
pw.flush();
socket.close();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[]){
new Server843().run();
}
}
flash as端很简单就不写了。
下一篇将会学习使用Mina。