Java与Flex建立Socket连接
2013-02-22 19:06
267 查看
Socket与其他的通信技术最大的不同是Socket连接在数据传输完成后不会自动关闭,因此服务器可以在任何时间主动发送数据给客户端.
Flex下Socket连接的方式有Socket和XMLSocket两种.
读取数据使用的是异步的方式,需要监听对应的事件
socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );
xmlSocket.addEventListener( DataEvent.DATA, onData );
写入数据的方式
socket下比较常用的是writeUTFBytes(String),writeMultiByte()可以自定义编码,
使用flush()发送数据
xmlScoket下 .send(String)
连接Socket的方式
socket.connect( "localhost", 2900 ); //代表地址和端口
如果要跨域连接服务器,需要加载策略文件
Security.loadPolicyFile("url/crossdomain.xml");
例子使用Java建立Socket服务器,然后使用Flex连接,并且进行数据交互
Java代码:
package socket;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class SocketService {
public static void main(String[] args) {
try {
System.out.println("启动ServerSocket..");
int i=1;
ServerSocket s=new ServerSocket(8189);
while (true) {
Socket incoming=s.accept();
System.out.println("新用户"+i);
Runnable r=new ThreadEcho(incoming);
Thread t=new Thread(r);
t.start();
i++;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class ThreadEcho implements Runnable
{
private Socket incoming;
public ThreadEcho(Socket s)
{
incoming=s;
}
public void run() {
try {
InputStream i=incoming.getInputStream();
OutputStream o=incoming.getOutputStream();
Scanner s=new Scanner(i);
PrintWriter p=new PrintWriter(o);
boolean done=false;
while(!done && s.hasNext())
{
String line=s.nextLine();
p.println("Echo"+line+"\n");
p.flush();
System.out.println("MSG"+line);
if(line.trim().equals("bye"))
{
done=true;
}
}
System.out.println("用户退出");
} catch (Exception e) {
e.printStackTrace();
}finally
{
try {
incoming.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Actionscript代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
<mx:Script>
<![CDATA[
private var sock:Socket;
private function connSocket():void
{
sock=new Socket();
sock.addEventListener(Event.CONNECT,onConnect)
sock.addEventListener(ProgressEvent.SOCKET_DATA,MSGHandler)
sock.connect(adds.text,int(post.text));
}
private function onConnect(evt:Event):void
{
trace("Connection sucess");
}
private function sendMSG():void
{
sock.writeUTFBytes(mess.text+"\n");
sock.flush();
trace('send msg'+mess.text);
}
/**消息获取函数*/
private function MSGHandler(event:ProgressEvent):void
{
trace("GetMSG"+sock.readUTFBytes(sock.bytesAvailable));
}
]]>
</mx:Script>
<mx:Button label="连接服务器" click="connSocket()"/>
<mx:TextInput text="127.0.0.1" x="100" width="200" id="adds"/>
<mx:TextInput text="8189" x="300" id="post"/>
<mx:Button label="发送数据" click="sendMSG()" y="40"/>
<mx:TextInput id="mess" x="100" y="40"/>
</mx:Application>
注意:需要使用手动的\n结尾发送数据
原文链接:http://www.software8.co/webqd/flex/3022.html
Flex下Socket连接的方式有Socket和XMLSocket两种.
读取数据使用的是异步的方式,需要监听对应的事件
socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );
xmlSocket.addEventListener( DataEvent.DATA, onData );
写入数据的方式
socket下比较常用的是writeUTFBytes(String),writeMultiByte()可以自定义编码,
使用flush()发送数据
xmlScoket下 .send(String)
连接Socket的方式
socket.connect( "localhost", 2900 ); //代表地址和端口
如果要跨域连接服务器,需要加载策略文件
Security.loadPolicyFile("url/crossdomain.xml");
例子使用Java建立Socket服务器,然后使用Flex连接,并且进行数据交互
Java代码:
package socket;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class SocketService {
public static void main(String[] args) {
try {
System.out.println("启动ServerSocket..");
int i=1;
ServerSocket s=new ServerSocket(8189);
while (true) {
Socket incoming=s.accept();
System.out.println("新用户"+i);
Runnable r=new ThreadEcho(incoming);
Thread t=new Thread(r);
t.start();
i++;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class ThreadEcho implements Runnable
{
private Socket incoming;
public ThreadEcho(Socket s)
{
incoming=s;
}
public void run() {
try {
InputStream i=incoming.getInputStream();
OutputStream o=incoming.getOutputStream();
Scanner s=new Scanner(i);
PrintWriter p=new PrintWriter(o);
boolean done=false;
while(!done && s.hasNext())
{
String line=s.nextLine();
p.println("Echo"+line+"\n");
p.flush();
System.out.println("MSG"+line);
if(line.trim().equals("bye"))
{
done=true;
}
}
System.out.println("用户退出");
} catch (Exception e) {
e.printStackTrace();
}finally
{
try {
incoming.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Actionscript代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
<mx:Script>
<![CDATA[
private var sock:Socket;
private function connSocket():void
{
sock=new Socket();
sock.addEventListener(Event.CONNECT,onConnect)
sock.addEventListener(ProgressEvent.SOCKET_DATA,MSGHandler)
sock.connect(adds.text,int(post.text));
}
private function onConnect(evt:Event):void
{
trace("Connection sucess");
}
private function sendMSG():void
{
sock.writeUTFBytes(mess.text+"\n");
sock.flush();
trace('send msg'+mess.text);
}
/**消息获取函数*/
private function MSGHandler(event:ProgressEvent):void
{
trace("GetMSG"+sock.readUTFBytes(sock.bytesAvailable));
}
]]>
</mx:Script>
<mx:Button label="连接服务器" click="connSocket()"/>
<mx:TextInput text="127.0.0.1" x="100" width="200" id="adds"/>
<mx:TextInput text="8189" x="300" id="post"/>
<mx:Button label="发送数据" click="sendMSG()" y="40"/>
<mx:TextInput id="mess" x="100" y="40"/>
</mx:Application>
注意:需要使用手动的\n结尾发送数据
原文链接:http://www.software8.co/webqd/flex/3022.html
相关文章推荐
- 使用Java与Flex建立Socket连接(已解决沙箱问题)
- java.net.SocketException(permission denied)安卓端写的TCP协议软件报错 原因是建立的套接字没有限权对外连接。
- java客户端与服务端建立连接 线程 ServerSocket
- java学习笔记---qq项目---在服务器端建立的一个Socket数组来存储已建立连接套接字
- java socket-TCP连接
- Java实现Socket短连接
- 通过socket连接传递java对象(对象序列化)
- java38.Socket通信------使用ServerSocket建立聊天服务器---2
- Android多页面切换,保持Java中Socket长连接之静态方法
- IOS Socket 03-建立连接与登录
- Java开源技术:建立Socket慢的问题
- java中判断socket服务器端是否断开连接
- 第三章:通话连接的作用以及建立过程之四GsmCallTracker.java与RIL.java交互完成物理拨号
- java连接solr并建立索引
- java 设置socket连接超时
- java|android 使用SocketIO.jar连接nodejs websocket
- 建立连接时抛java.net.BindException: Cannot assign requested address: no further
- Flex与.NET互操作(一):基于Socket的网络连接
- Java 使用jdbc:odbc 建立无源连接access数据库