今天在写一个Socket应用,需求是C#的服务端,Andorid的客户端。流程如下:
C# Socket Server
1.建立C# SocketServer
1 private void ServerStart() 2 { 3 // 创建IPEndPoint 4 IPEndPoint ipep = new IPEndPoint(IPAddress.Parse( " 127.0.0.1 "), 1234); 5 // 创建Socket实例 6 server_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 7 // 绑定Socket与IPEndPoint 8 server_Socket.Bind(ipep); 9 // 设置Socket收听模式 10 server_Socket.Listen( 10); 11 12 while ( true) 13 { 14 try 15 { 16 // 接受Andorid信息 17 client_Socket = server_Socket.Accept(); 18 client_Thread = new Thread( new ThreadStart(ReceiveAndroidData)); 19 client_Thread.Start(); 20 } 21 catch (Exception ex) 22 { 23 MessageBox.Show( " start error: " + ex.Message); 24 } 25 26 } 27 }
2.开启一个Theard,执行
1 server_Thread = new Thread( new ThreadStart(ServerStart)); 2 server_Thread.Start();
3.介绍方法
private void ReceiveAndroidData() { bool keepalive = true; Socket socketclient = client_Socket; Byte[] buffer = new Byte[ 1024]; // 根据收听到的客户端套接字向客户端发送信息 IPEndPoint clientep = (IPEndPoint)socketclient.RemoteEndPoint; lstServer.Items.Add( " Andorid Client: " + clientep.Address + " : "+clientep.Port); string str = " connect server----- "; byte[] data = new byte[ 1024]; data = Encoding.ASCII.GetBytes(str); socketclient.Send(data, data.Length, SocketFlags.None); while (keepalive) { // 在套接字上接收客户端发送的信息 int buffer_lenght = 0; try { buffer_lenght = socketclient.Available; socketclient.Receive(buffer, 0, buffer_lenght, SocketFlags.None); if (buffer_lenght == 0) continue; } catch (Exception ex) { MessageBox.Show( " receive error: " + ex.Message); return; } clientep = (IPEndPoint)socketclient.RemoteEndPoint; string strAndroid_CMD = System.Text.Encoding.ASCII.GetString(buffer).Substring( 0, buffer_lenght); // 对根据strAndroid_CMD到数据库中查询值
Android Client:
1. OnCreate方法中执行
try { Socket socket = new Socket("10.0.2.2", 1234); PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); out.println(cameraid); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
代码很就简单
==================================
需要注意的是:
1.添加internet访问权限:<uses-permission android:name="android.permission.INTERNET" />。
2.127.0.0.1 IP被模拟器占用了,而本身PC的IP为10.0.2.2,如果本机测试的时候需要注意这一点。
转载于:https://www.cnblogs.com/Enno/archive/2012/02/24/2363428.html
