来源:网络整理
时间:2023/2/14 0:04:45 共 3652 浏览
初次接触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());
}
}
};
}

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。