socket传输xml
⑴ 开发中xml与json,http协议与 socket技术分别有什么区别
1)XML 和JSON是两种完全不同的数据表达方式。他们分别采用完全不同格式将原始数据转内换成XML或者容JOSN格式数据;然后再将XML或JOAN格式的数据还原为原始数据
2)Socket是用来编写TCP/IP或UDP/IP通信程序的;HTTP是使用TCP/IP的“应用层协议”,HTTP协议利用(借助于) TCP/IP 实现传输。
3)XML和JSON都可以借助HTTP进行传输
===
一个形象的比喻:TCP/IP是由SOCKET修建公路,HTTP是公路上跑的车,XML或JSON是车装载的货物。
⑵ XMLSocket 通讯如何测试
XMLSocket主要用于与服务端进行即时通信,目前的应用领域主要是Flash文本聊天和Flash在线游戏等方面。
    XMLSocket的优点:
    1、能和服务端即时通信;
    2、Flash Player 5.0以上的版本内置类,不需另装组件或插件;
    3、因为XMLSocket就是相当于一个Socket客户端,所以一般的中间件都支持的(如java,.Net等)
    XMLSocket的缺点:
    1、XMLSocket只能传字符串或xml格式的文本,数据类型单一;
    2、XMLSocket服务端自行开发的话,需要对Socket技术比较了解才行,好在网上有现成的服务端软件(商业的XMLSocket Server 有Unity、Fortress;开源的XMLSocket Server 有Oregano Multiuser Server);
    3、还有就是XMLSocket的80端口与flash安全策略问题。(网上有一个解决方法,不知是否可行,请自行验证)
//=======================================;
// Flash客户端(以Flash文本聊天为例);
//=======================================;
var paramObj:Object = new Object();
//命令分隔符;
paramObj.CommandDelimiters = "-@@##@@-";
//用户列表分隔符;
paramObj.PeopleDelimiters = "-@#@-";
//建立XMLSocket对象;
var socket:XMLSocket = new XMLSocket();
//连接状态事件;
socket.onConnect = function(success) {
trace("socket.onConnect:"+success);
if (!success) {
trace("服务器连接失败,请检查网络状态!");
}
};
//关闭事件;
socket.onClose = function() {
trace("服务端已关闭!");
logoutChat();
};
//数据通信事件;
socket.onData = function(src) {
//trace("socket.onData:"+src);
doCommand(getCmdArrayByMsg(trim(src)));
};
//用户登录;
function loginChat():Void {
//连接Socket服务端;
socket.connect(“localhost”, “8888”);
sendSocket("INFO"+paramObj.CommandDelimiters+msg);
}
//用户注销;
function logoutChat(b:Boolean):Void {
sendSocket("QUIT");
}
//显示聊天信息;
function showChat(msg:String):Void {
trace(“聊天信息:”+msg);
}
//发送聊天信息;
function sendChat(msg:String):Void{
sendSocket("MSG"+paramObj.CommandDelimiters+msg+paramObj.CommandDelimiters+msg);
}
//向服务端发送信息;
function sendSocket(msg:String):Void {
socket.send(msg+"\r");
}
//处理服务端返回信息;
function getCmdArrayByMsg(msg:String):Array {
if (msg.charCodeAt(0) == 13 && msg.charCodeAt(1) == 10) {
msg = msg.substr(2);
}
return msg.split(paramObj.CommandDelimiters);
}
function doCommand(arr:Array):Void {
switch (arr[0]) {
case "MSG" :
showChat(arr[1]);
break;
case "TAKEN" :
trace("你的登录名已经有了,请重新换一个登录名!");
break;
case "PEOPLE" :
doPeople(arr[1]);
break;
}
}
//显示在线用户列表;
function doPeople(msg:String):Void {
var people_arr:Array = msg.split(paramObj.PeopleDelimiters);
trace(people_arr);
}
⑶ 如何通过socket传输xml
socket传文件 
       private string path = "F:\\SmartMovie.EXE";    //要发送的文件
                      private Socket s;                              
         private void listen()
        {
            string ip = "127.0.0.1";   //远程IP 这里定义为自己的机器
            IPAddress[] ih = Dns.GetHostAddresses(ip);       //获得IP列表
            IPAddress newip = ih[0];      //获取IP地址            
            int port = 6789;              //定义端口
            IPEndPoint Conncet = new IPEndPoint(newip, port);     //构造结点
            s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,  ProtocolType.Tcp);                   //初始化 
     try
        {                                  
            s.Connect(Conncet);      //连接远程服务器
            if (s.Connected)         //如果连接成功 s.Connected 则为true 否则为 false
            {
Console.WriteLine("连接成功");
                Thread t = new Thread(new ThreadStart(set)); //创建进程
                t.Start();                             //开始进程
                Console.WriteLine("发送完毕")      
            }
               }
                catch(NullReferenceException e)
            {
              Console.WriteLine("{0}",e);
            }
            private void set()                       //创建set函数
        {
            Console.WriteLine("开始发送数据");
            byte[] b = new byte[10000000];            //创建文件缓冲区,这里可以认为文件的最大值
            FileStream file = File.Open(path, FileMode.Open,FileAccess.Read);   //创建文件流
            int start = 0;
            int end = (int)file.Length;               //获取文件长度文件传送如果有需要超过int的范围估计就要改写FileStream类了
      try
          {
            while (end != 0)
            {
                int count = file.Read(b, start, end);      //把数据写进流
                start += count;
                end -= count;
            }
            while (start != 0)
            {
                int n = s.Send(b, end, start, SocketFlags.None);  //用Socket的Send方法发送流
                end += n;
                start -= n;
            }
        
            file.Close();     //关闭文件流
            s.Close();        //关闭Socket
          }  
      catch (NullReferenceException e)
            {
                Console.WriteLine("{0}", e);
            }             
        }   
这样文件发送的模型就实现了
    接下去实现文件的接收,首先要确定对方发送文件的长度,其实上面的那段还要加入发送文件长度的功能,实现很简单,就是发送int变量end ,然后要求接收代码返回一个Boolean确定是否发送,这里为了更简明的说清楚原理并没有实现
             private void get()
        {
            string path = "G:\\da.exe";  //接收的文件
            FileStream file = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); //写入文件流
            TcpListener listen = new TcpListener(6789);  //监听端口
            Socket s1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  //定义Socket并初始化
            try
            {
             listen.Start();        //开始监听
            s1 = listen.AcceptSocket();            //获取Socket连接
            byte[] data = new byte[10000000];      //定义缓冲区
            int longer = data.Length;               
            int start = 0;                 
            int mid = 0;
            if (s1.Connected)             //确定连接
            {
                Console.WriteLine("连接成功");
                int count = s1.Receive(data, start, longer, SocketFlags.None);  //把接收到的byte存入缓冲区
                mid += count;
                longer -= mid;
                while (count != 0)
                {
                    count = s1.Receive(data, mid, longer, SocketFlags.None);
                    mid += count;
                    longer -= mid;
                }
                file.Write(data, 0, 1214134); //写入文件,1214134为文件大小,可以用socket发送获得,代码前面已经说明。
                s1.Close();
                file.Close();
            }
            }
                catch(NullReferenceException e)
            {
                    Console.WriteLine("{0}",e);
            }
          }
⑷ C语言的socket 怎么发送XML格式的数据
用send或sendto
发什么格式的数据和socket本身没什么关系,xml和一般的数据没什么两样,就是要拼装一下xml格式就行了
