Socket with java server
một ví dụ về socket:
flash chỉ có thể là client. Cần dùng một ngôn ngữ khác để tạo server socket:
java server socket:
server đợi request từ client tới, nếu có request, sẽ tạo socket với client. Sau khi tạo socket, trả về client chuỗi “hello client”.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server
{/**
* @param args
*/
public static void main(String[] args)
{
try
{
//tao ServerSocket
ServerSocket server = new ServerSocket(2000);//create socket connect to client
Socket socket = server.accept();//wait client request
System.out.println(“da tao socket”);//create stream to write to client
OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());
//write from server
out.write(“hello client”);
out.flush();//create stream to read from client
BufferedReader read = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//read from client
String str;
while(true)
{
str = read.readLine();
if(str==null) break;
System.out.println(str);
}} catch (Exception e)
{
e.printStackTrace();
}}
Phía client: ta dùng actionscript để tạo socket kết nối với server: tạo application trong flex:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” creationComplete=”init()”>
<mx:Script>
<![CDATA[
private var server:String = "localhost";
private var port:Number = 2000;
private var socket:Socket;
private function init():void {
socket = new Socket();
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(ErrorEvent.ERROR, onError);
socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);
Security.allowDomain(server);
Security.loadPolicyFile("http://"+server+"/crossdomain.xml");
try {
socket.connect(server, port);
outMessage("Trying to connect to "+server+":"+port);
} catch (error:Error) {
socket.close();
outMessage(error.message);
}}
public function send(string:String):void {
socket.writeUTFBytes(string);
socket.flush();
}
private function onConnect(event:Event):void {
outMessage("Connected to "+server+":"+port);
socket.writeUTFBytes("hello server 1\n");
// send("respond");
}
private function onClose(event:Event):void {
outMessage("Connection closed");
}
private function onError(event:IOErrorEvent):void {
outMessage("Connection error");
}
private function onIOError(event:IOErrorEvent):void {
outMessage("I/O error");
}
private function onResponse(event:ProgressEvent):void {
var string:String = socket.readUTFBytes(socket.bytesAvailable);
outMessage(string);
socket.writeUTFBytes("hello server 2\n");}
public function outMessage(msg:String):void {
log.htmlText += '<font color="#000099">'+msg+'<br></font>';
}
]]>
</mx:Script>
<mx:TextArea id=”log” width=”400″ height=”200″ x=”10″ y=”10″ selectable=”false”/>
</mx:Application>
Mọi giao tiếp giữa client và server cần được viết trong hàm onResponse(event:ProgressEvent).

vậy giải pháp cho tình huống thực tế là có nhiều request được gửi đến server từ client thì sao em? multi threading ah