今天是:   | 登录中心 | | 网络导航
logo 来海南旅游咨询 海南旅游 预订海南酒店 自驾租车 海南高尔夫 问路订房就请拔打海南旅游百事通  全天24小时为您守候 设为首页
加入收藏
联系站长
导航页为首页
内容页为首页
当前位置:南国风 >> IT.信息技术 >> game@webdev >> 浏览文章

Flash Socket 编程 示例,flash9以上(1)

作者:佚名 日期:2010年11月02日 来源:本站原创 人气:

Flash 在8.0的时候已经有了关于socket 一些功能,但是功能还局限在一定角落里面。在9.0的 player 发展后,socket处理有了很大的改善,可以发送一些二进制的数据,从而通信能力大大提高。在说socket编程之前,我们还是不能忘记,flash在服务器领域还是“小学生”,不过在客户端领域,它就是一个“研究生”;

首先我们看一些利用java做客户端,java做服务器来搭建一个最简单的通信。所用到的知识,包括输入输出流,还有Socket知识点。

原理: 通信的过程,是一个双工的过程,也就是说,客户端既然 发送端 也是接收端 。同样服务器也是一样。

 

从这里可以看出,客户端的输入流 就是服务器的输出流所发送来的信息。而服务器的输入流同样是客户端所发送来的

一,客户端

view plaincopy to clipboardprint?
package com;  
 
import java.net.*;  
import java.io.*;  
 
public class TcpClient {  
 
    public static void main(String[] args) {  
        String host="127.0.0.1";  
        int port =8001;  
        try {  
            Socket s = new Socket(host,port);  
              
            InputStream ips =s.getInputStream();  
            OutputStream ops=s.getOutputStream();  
            BufferedReader brNet = new BufferedReader(  
                    new InputStreamReader(ips));//输入流  
                      
            PrintWriter pw = new PrintWriter(ops,true);  
            BufferedReader brKeyBoard = new BufferedReader(  
                    new InputStreamReader(System.in));//键盘缓冲  
            while(true){  
                String strWord =brKeyBoard.readLine();  
                pw.println("Jim:"+strWord+"\n");  
                System.out.println(brNet.readLine());  
              
            }  
            //pw.close();  
        //  brNet.close();  
        //  brKeyBoard.close();  
        //  s.close();  
        } catch (UnknownHostException e) {  
            // TODO 自动生成 catch 块  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO 自动生成 catch 块  
            e.printStackTrace();  
        }  
    }  
 

package com;

import java.net.*;
import java.io.*;

public class TcpClient {

 public static void main(String[] args) {
  String host="127.0.0.1";
  int port =8001;
  try {
   Socket s = new Socket(host,port);
   
   InputStream ips =s.getInputStream();
   OutputStream ops=s.getOutputStream();
   BufferedReader brNet = new BufferedReader(
     new InputStreamReader(ips));//输入流
     
   PrintWriter pw = new PrintWriter(ops,true);
   BufferedReader brKeyBoard = new BufferedReader(
     new InputStreamReader(System.in));//键盘缓冲
   while(true){
    String strWord =brKeyBoard.readLine();
    pw.println("Jim:"+strWord+"\n");
    System.out.println(brNet.readLine());
   
   }
   //pw.close();
  // brNet.close();
  // brKeyBoard.close();
  // s.close();
  } catch (UnknownHostException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
 }

}
 

程序的入口:是main 函数。

在main函数里面创建一个socket对象: Socket s = new Socket(host,port);

并写上两个参数,一个是主机名,也是ip ,而port 就是端口,指定一个端口。(这个端口要在允许的范围填写)

接下来,创建两个输入输出流:

InputStream ips =s.getInputStream();
OutputStream ops=s.getOutputStream();

通过Socket类的 getInputStream 和getOutputStream 返回输入输出流信息

为了使效率提高,在客户端引用缓冲。BufferedReader类用于缓冲使用。

BufferedReader brNet = new BufferedReader(
     new InputStreamReader(ips));//输入流
    
   BufferedReader brKeyBoard = new BufferedReader(
     new InputStreamReader(System.in));//键盘缓冲

下一步 接收键盘输入的信息 以及 发送信息到服务器端里面去:

while(true){
    String strWord =brKeyBoard.readLine();
    pw.println("Jim:"+strWord+"\n");
    System.out.println(brNet.readLine());
  
   }

Socket 会抛出OException 异常,所以要进行捕捉。try{}catch()处理机制

二 服务器:

view plaincopy to clipboardprint?
package com;  
import java.net.*;  
import java.io.*;  
public class Server {  
      
      
    public static void main(String[] args) {  
     PrintWriter os=null;  
        try{  
        ServerSocket ss=new ServerSocket(8001);  
        System.out.println("等待连接....");  
        Socket sk=ss.accept();  
        System.out.println("连接成功....");  
        BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));   
        System.out.println("获取里面的内容......");   
        //等待接受信息   
        os = new PrintWriter(sk.getOutputStream());   
       String word=null ;  
      //发送信息   
      while((word=br.readLine())!=null)  
      {      
       os.println("你好我是服务器");   
       os.flush();   
       System.out.println("内容:" + word);  
         
      }  
    }  
        catch(IOException ex)  
        {  
            ex.printStackTrace();  
              
        }  
    }  
 

package com;
import java.net.*;
import java.io.*;
public class Server {
   
 
 public static void main(String[] args) {
  PrintWriter os=null;
  try{
  ServerSocket ss=new ServerSocket(8001);
  System.out.println("等待连接....");
  Socket sk=ss.accept();
  System.out.println("连接成功....");
  BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));
     System.out.println("获取里面的内容......");
     //等待接受信息
        os = new PrintWriter(sk.getOutputStream());
    String word=null ;
   //发送信息
   while((word=br.readLine())!=null)
   {   
    os.println("你好我是服务器");
    os.flush();
    System.out.println("内容:" + word);
   
   }
 }
  catch(IOException ex)
  {
   ex.printStackTrace();
   
  }
 }

}
 

服务器搭建其实也很简单

首先创建一个ServerSocket ss=new ServerSocket(8001);

ServerSocket 对象,然后调用 accept()方法

Socket sk=ss.accept();一直阻塞,直到返回Socket对象这样我们就可以像在客户端一样进行输入流和输入出的处理。并返回输出结果 缓冲等等

输出结果:将客户端发送的字符串进行输出

  while((word=br.readLine())!=null)
   {   
    os.println("你好我是服务器");
    os.flush();
    System.out.println("内容:" + word);
   
   }

但问题其实还是有的,在客户端发送的时候,由于没有过滤掉回车符所以在服务器里面会输出两个结果

等待连接....
连接成功....
获取里面的内容......
内容:Jim:dd

内容:

注意一个是有内容,一个是没有内容导致这个Tcp的通信出现问题。

接下来,我们尝试搭建flash客户端


 


email:lifat@yeah.net| QQ:_3000_99**61 T先生
  服务指南 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 |


南国风网站的版权信息:保留所有权力

不良信息举报中心!
琼ICP备15001822号