隐藏

C#做服务端,android做客户端,采用socket方式实现通信

发布:2014/5/17 0:15:15作者:管理员 来源:本站 浏览次数:1652

初次接触android,之前也没有研究过java,利用c#做服务端,android做客户端,采用socket方式实现服务端和客户端的通信。现贴出代码,希望大家分享和探讨:在实现二者的通信时,数据传输大家是怎么进行设计的,是否采用的json的方式,序列与反序列是符合实现的?现在流行的手机客户端和服务端采用的架构是怎样的?
c#服务端代码:


  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
using DataClass;
namespace server
{
    public partial class Form1 : Form
    {
        public string random = "";
        private static IPAddress myIP;  //把字符串转换为IPAddress格式;
        private static int Serverport = 5555;//端口号
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.textBox1.Text == "")
            {
                MessageBox.Show("请输入端口号!");
            }
            else
            {
                Thread receiveThread = new Thread(new ThreadStart(StartTCP));
                receiveThread.Name = DateTime.Now.Second.ToString();
                receiveThread.Start();

            }
        }
        public void StartTCP()
        {
            int portNum = Convert.ToInt32("5555");

            TcpListener listener = new TcpListener(myIP,portNum);
            while (true)
            {
                //listener.Stop();
                listener.Start();


               // this.richTextBox1.AppendText("Waiting for connection..." + "\r");

                TcpClient client = listener.AcceptTcpClient();
               // this.richTextBox1.AppendText("Connection accepted." + "\r");
                //System.Net.Sockets.tc
                NetworkStream ns = client.GetStream();

               // byte[] byteTime = Encoding.UTF8.GetBytes(this.textBox2.Text);

                //random
                Random rnd = new Random();
                int r1 = rnd.Next(200,300);
                int r2 = rnd.Next(899, 1025);
                int r3 = rnd.Next(358, 500);
                int r4 = rnd.Next(700, 800);

                byte[] S_C_Buffer;

                Trasferdata objdata_return = new Trasferdata();

                objdata_return.message = DateTime.Now.ToString("T");//发送收到时间确认包
                objdata_return.v[0] = objdata_return.message+","+r1.ToString() + "," + r2.ToString() + "," + r3.ToString() + "," + r4.ToString();
                objdata_return.v[1] = "1234,456,789,abc,def,ghi,jkl,mno,pqr,stu";
                objdata_return.v[2] = "onivor";
                //objdata_return.m_type = 2;//数据包
                //S_C_Buffer = ObjectToByteA(objdata_return);
                S_C_Buffer = Encoding.UTF8.GetBytes(objdata_return.v[0]);

                try
                {
                    ns.Write(S_C_Buffer, 0, S_C_Buffer.Length);

                    ns.Close();
                    client.Close();
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.ToString());
                }

                listener.Stop();
                Thread.Sleep(1000);

            }
        }
        //序列化对象
        public byte[] ObjectToByteA(Trasferdata obj)
        {
            MemoryStream fs = new MemoryStream();
            byte[] tmp = null;
            try
            {
                //   序列化   
                BinaryFormatter formatter = new BinaryFormatter();
                //IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(fs, obj);

                tmp = fs.ToArray();
            }
            catch (Exception e)
            {
                Console.WriteLine("发生问题{0}", e.Message.ToString());
                //Console.ReadLine();
            }
            finally
            {

                fs.Close();
                fs.Dispose();
            }
            return tmp;
        }


        //反序列化,解包
        public Trasferdata ByteAToObject(byte[] ba)
        {
            MemoryStream fs = new MemoryStream();
            Trasferdata obj = null;
            // try
            // {
            //   反序列化   
            fs = new MemoryStream(ba);
            fs.Position = 0;
            if (fs.Position != 0)
            {
                Console.WriteLine("发生问题");
            }
            BinaryFormatter formatter = new BinaryFormatter();
            obj = (Trasferdata)formatter.Deserialize(fs);
            // }
            // catch (Exception e)
            // {
            //   Console.WriteLine("发生问题df:{0}", e.Message.ToString());
            //  }
            //   finally
            //  {
            //      fs.Close();
            // fs.Dispose();
            // }
            fs.Close();
            fs.Dispose();
            return obj;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            myIP = IPAddress.Parse("10.15.16.222");
        }
    }
}



android 客户端代码:
package com.yarin.android.Examples_08_05;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Button;

public class Activity01 extends Activity
{

private final String
DEBUG_TAG
= "Activity01";

//服务器IP、端口

private static final String SERVERIP = "10.15.16.222";

private static final int SERVERPORT = 5555;

private Thread mThread = null;

private Socket
mSocket
= null;

private Button
mButton_1
= null;

private Button
mButton_2
= null;

private Button
mButton_3
= null;

private Button
mButton_4
= null;

private BufferedReader
mBufferedReader
= null;

private  String mStrMSG = "";

private String[] varr;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mButton_1 = (Button)findViewById(R.id.Button_1);

mButton_2 = (Button)findViewById(R.id.Button_2);

mButton_3 = (Button)findViewById(R.id.Button_3);

mButton_4 = (Button)findViewById(R.id.Button_4);

mThread = new Thread(mRunnable);

mThread.start();


}



//线程:监听服务器发来的消息

private Runnable
mRunnable
= new Runnable() 

{

public void run()

{

while (true)

{



try

{

Thread.sleep(1000);

mSocket = new Socket(SERVERIP, SERVERPORT);


mBufferedReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));

mStrMSG="";

if ( (mStrMSG = mBufferedReader.readLine()) != null )

{

varr=mStrMSG.split(",");

mHandler.sendMessage(mHandler.obtainMessage());

}

// 发送消息

}

catch (Exception e)

{

Log.e(DEBUG_TAG, e.toString());

}



}

}

};



Handler
mHandler
= new Handler() 

{


  public void handleMessage(Message msg)


  {


  super.handleMessage(msg);


  // 刷新


  try


  {


  mButton_1.setText(varr[0]);


  mButton_2.setText(varr[1]);


  mButton_3.setText(varr[2]);


  mButton_4.setText(varr[3]);


  }


  catch (Exception e)


  {


  Log.e(DEBUG_TAG, e.toString());


  }


  }


};