Flex与C#socket通信(二)

28 篇文章 0 订阅
17 篇文章 0 订阅

Flex调用C# SOCKET,给服务器端发送消息

C# socket代码


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
using System.Net;


namespace socketWin
{
    public partial class Form1 : Form
    {
        private bool ServiceStartFlag = false;
        private Socket m_Socket;
        NetworkStream networkStream;
        Thread m_Thread;
        public delegate void HelpHandler(string str);


        public Form1()
        {
            InitializeComponent();
            btnStart.Enabled = true;
            btnStop.Enabled = false;
        }


        private void btnStart_Click(object sender, EventArgs e)
        {
            int Port = int.Parse(txtPort.Text);
            m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress LocalServerIP = GetIPAddress();


            IPEndPoint LocalIPEndPoint = new IPEndPoint(LocalServerIP, Port);


            m_Socket.Bind(LocalIPEndPoint);


            m_Socket.Listen(600);


            m_Thread = new Thread(new ThreadStart(AcceptClient));
            m_Thread.IsBackground = true;
            m_Thread.Start();
        }
        private void AcceptClient()  
        {  
            ServiceStartFlag = true;  
  
            while (ServiceStartFlag)  
            {  
                try  
                {  
                    Socket newSocket = m_Socket.Accept();
                    string onemessge = "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"8086\"/></cross-domain-policy>\0";
              //      string onemessge = "<cross-domain-policy><allow-access-from domain=\"" + "*" + "\" to-ports=\"" + txtPort.Text + "\"/></cross-domain-policy>/0";  
                    byte[] tmpBytes = Encoding.UTF8.GetBytes(onemessge);  
                    newSocket.Send(tmpBytes);  
  
                    Thread newThread = new Thread(new ParameterizedThreadStart(ReadMsg));  
                    newThread.IsBackground = true;  
                    object obj = newSocket;  
                    newThread.Start(obj);  
                }  
                catch (SocketException ex)  
                {   
                }  
            }  
        }
        private void ReadMsg(object obj)
        {
            Socket socket = (Socket)obj;
            HelpHandler rHandler = new HelpHandler(ReceivedMsg);


            byte[] byteMessage = null; ;


            while (ServiceStartFlag)
            {
                try
                {
                    if (socket.Connected)
                    {


                        byteMessage = new byte[1000];
                        int len = socket.Receive(byteMessage);
                        if (len > 0)
                        {
                            string sTime = DateTime.Now.ToShortTimeString();


                            string msg = sTime + ":" + "Message from:";


                            msg += socket.RemoteEndPoint.ToString() + Encoding.UTF8.GetString(byteMessage);
                            BeginInvoke(rHandler, new object[] { msg });
                            byteMessage = null;


                            byte[] tmpBytes = Encoding.UTF8.GetBytes("Sended Sucessed!/0");


                            socket.Send(tmpBytes);
                        }




                    }
                }
                catch (SocketException ex)
                {


                    BeginInvoke(rHandler, new object[] { ex.ToString() });


                }
            }
        }
        private void ReceivedMsg(string str)
        {
            this.listBox1.Items.Add(str);
        }
        private IPAddress GetIPAddress()
        {
            IPHostEntry ieh = Dns.GetHostByName(Dns.GetHostName());


            return ieh.AddressList[0];
        }


    }
}


Flex端代码:


<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" 
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 

<fx:Script>
<![CDATA[
import mx.controls.Alert;
/
//private member 
private var xmlsocket:XMLSocket= new XMLSocket();
private var alert:Alert;
private var tmpStr:String;

/

//连接服务器
private function ConncetServer():void
{
xmlsocket.addEventListener(DataEvent.DATA,OnRecived);
xmlsocket.addEventListener(Event.CONNECT , onConnected);
this.xmlsocket.connect(this.txtIP.text,int(this.txtPort.text));

}

private function onConnected(evt:Event):void
{
xmlsocket.send(this.txtTrueName.text+" has connected");
this.txtContent.text=this.txtContent.text+"连接成功/n";
}

//发送信息
private function Send():void
{
this.xmlsocket.send(this.txtTrueName.text+"|"+this.txtSendContent.text+"/n");
}

//接收数据
private function OnRecived(event:DataEvent):void
{    
trace("等待读取数据信息");

tmpStr = event.text;

//alert=Alert.show("收到新消息","消息");

this.txtContent.text=this.txtContent.text+"/n"+tmpStr;
}

]]>
</fx:Script>

<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>

<s:Panel right="0" left="0" top="0" bottom="0"  horizontalCenter="left">
<mx:TextInput   borderColor="#070D04" borderStyle="inset" id="txtIP" text="192.168.1.99" left="88" top="23"/>
<mx:TextInput borderColor="#070D04" borderStyle="inset" width="94" id="txtPort" text="6666" left="293" top="23"/>
<mx:TextInput borderColor="#070D04" borderStyle="inset" width="94" id="txtTrueName" text="小虎" left="432" top="23"/>
<mx:Label text="服务器IP" fontSize="12" left="15" top="23"/>
<mx:Label text="姓名" fontSize="12" left="395" top="23"/>
<mx:Label text="端口" fontSize="12" left="256" top="23"/>
<mx:Button label="登录" fontSize="12" id="btnLogin" left="552" top="23" click="ConncetServer()"/>
<mx:Button label="发送" fontSize="12" id="btnSend" left="552" top="68" click="Send();" />
<s:TextInput borderColor="#04010C" width="516" alpha="1.0" id="txtSendContent" left="10" top="70"/>
<mx:TextArea borderColor="#010A10" id="txtContent" left="10" top="110" right="10" bottom="10"/>
</s:Panel>



</s:Application>


代码二:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;


namespace socketProdeceTest
{
    class StockClient
    {
        private static readonly Encoding ASCII;
        private const int PORT = 8086;


        private const String SEND_MESSAGE = "Hello Socket Server!";


        static StockClient()
        {
            ASCII = Encoding.ASCII;
        }
        public void SendMessage()
        {
            // 构造用于发送的 字节缓冲.
            Byte[] sendBytes = ASCII.GetBytes(SEND_MESSAGE);
            // 构造用于接收的 字节缓冲.
            Byte[] recvBytes = new Byte[256];
            // IP地址.
            IPAddress localAddr = IPAddress.Parse("192.168.30.33");
            // 接入点.
            IPEndPoint ephost = new IPEndPoint(localAddr, PORT);


            // 第一个参数:AddressFamily = 指定 Socket 类的实例可以使用的寻址方案。
            //     Unspecified 未指定地址族。
            //     InterNetwork IP 版本 4 的地址。
            //     InterNetworkV6 IP 版本 6 的地址。
            //
            // 第二个参数:SocketType = 指定 Socket 类的实例表示的套接字类型。
            //     Stream 一个套接字类型,支持可靠、双向、基于连接的字节流,而不重复数据,也不保留边界。
            //            此类型的 Socket 与单个对方主机通信,并且在通信开始之前需要建立远程主机连接。
            //            此套接字类型使用传输控制协议 (Tcp),AddressFamily 可以是 InterNetwork,也可以是 InterNetworkV6。
            //
            // 第三个参数:ProtocolType = 指定 Socket 类支持的协议。
            //     Tcp 传输控制协议 (TCP)。
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                // 尝试连接主机.
                s.Connect(ephost);


                Console.WriteLine("向服务器发送到了:{0}", SEND_MESSAGE);
                // 向主机发送数据.
                s.Send(sendBytes, sendBytes.Length, SocketFlags.None);
                // 接收服务器的应答.
                Int32 bytes = s.Receive(recvBytes, recvBytes.Length, SocketFlags.None);


                StringBuilder buff = new StringBuilder();
                while (bytes > 0)
                {
                    // 将缓冲的字节数组,装换为字符串.
                    String str = ASCII.GetString(recvBytes, 0, bytes);
                    // 加入字符串缓存
                    buff.Append(str);
                    // 再次接受,看看后面还有没有数据.
                    bytes = s.Receive(recvBytes, recvBytes.Length, SocketFlags.None);
                }
                Console.WriteLine("从服务器接收到了:{0}", buff.ToString());


            }
            catch (Exception ex)
            {
                Console.WriteLine("连接/发送/接收过程中,发生了错误!");
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                s.Close();
            }
        }
    }
}


原文参照:http://blog.csdn.net/gladqq/article/details/5575087
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值