Android 模拟器(JAVA)与C++ socket 通讯(IP设置)

原文:http://www.rosoo.net/a/201112/15430.html

android 模拟器使用的IP 地址为"127.0.0.1";使用PC机的端口号,在模拟器TCP连接调试之前必须使用android sdk 使用的工具进行一次端口映射。即使用 Sdk 中的Tools下abd 工具,在cmd 窗口中运行

E://install//android//Android//android-sdk-windwows//tools//adb forward tcp:12581 tcp:31012" 前面目录为android sdk  Tools 所在目录。根据本机情况而定。
如果有多个设备(模拟器或者真机)连接在PC上,可以指定设备:
adb -s <serialNumber> <command> 
例如:adb -s 
HTC91245667 forward tcp:12581 tcp:31012

程序C++ 部分编程环境vs 2005 android 采用eclipse 下 android 2.1版本。测试通过。以下是完整源码:

C++ 作为Client端

  1. // Client.cpp : Defines the entry point for the console application.    
  2. //    
  3.  
  4. #include "stdafx.h"    
  5. #include <Winsock2.h>    
  6.  
  7. #pragma comment(lib,"ws2_32.lib")    
  8.  
  9. #define  MAX_BUF_SIZE 1024    
  10. #define  PORT_NUMBER 12581    
  11. int _tmain(int argc, _TCHAR* argv[])    
  12. {    
  13.  
  14.     WSADATA wSaData;    
  15.     WORD dwSockVersion = MAKEWORD(2,2);    
  16.     if (0 != WSAStartup(dwSockVersion,&wSaData)) //协商版本号 
  17.     { 
  18.         printf("Arrange Version Failure"); 
  19.         return -1; 
  20.     } 
  21.  
  22.     SOCKET nSocket;    
  23.     nSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //创建TCP socket    
  24.     if (INVALID_SOCKET == nSocket)    
  25.     {    
  26.         printf("invalid socket");    
  27.         WSACleanup();    
  28.         return -1;    
  29.     }    
  30.  
  31.     sockaddr_in sa;    
  32.     sa.sin_family = AF_INET;    
  33.     sa.sin_addr.s_addr = inet_addr("127.0.0.1");    
  34.     sa.sin_port = htons(PORT_NUMBER); 
  35.     if ( 0 != connect( nSocket,( const SOCKADDR * )&sa, sizeof(sa) ) ) 
  36.         return -1; 
  37.  
  38.     char buf[MAX_BUF_SIZE] = {0};    
  39.     char tmp[MAX_BUF_SIZE] = {0}; 
  40.     strcpy(tmp,"this is Client!"); 
  41.  
  42.     int nSend = send(nSocket, tmp, (int)strlen(tmp), 0); 
  43.     int nRecv = 0; 
  44.     nRecv = recv(nSocket, buf, MAX_BUF_SIZE, 0); 
  45.     if (nRecv > 0) 
  46.     { 
  47.         printf("%s/n",buf); 
  48.     } 
  49.     closesocket(nSocket); 
  50.     WSACleanup(); 
  51.     return 0; 

Android 模拟器,JAVA作为Serve端

  1. package com.Android.SocketTest; 
  2.  
  3. import java.io.DataInputStream; 
  4. import java.io.DataOutputStream; 
  5. import java.net.InetAddress; 
  6. import java.net.ServerSocket; 
  7. import java.net.Socket; 
  8.  
  9.  
  10. import android.app.Activity; 
  11. import android.os.Bundle; 
  12.  
  13. public class SocketTest extends Activity { 
  14.     /** Called when the activity is first created. */ 
  15.     @Override 
  16.     public void onCreate(Bundle savedInstanceState) { 
  17.         super.onCreate(savedInstanceState); 
  18.         setContentView(R.layout.main); 
  19.          
  20.         StartAcceptSocket(); 
  21.     }
  22.     private void StartAcceptSocket()  
  23.     {
  24.         try 
  25.         {              
  26.             short nPort = 31012
  27.             ServerSocket m_pServerSocket = new ServerSocket(nPort); //初始化socket 
  28.             Socket pAccSocket = m_pServerSocket.accept(); //accept 阻塞等待 
  29.             new RunningThread(pAccSocket).start();  //新建一个线程进行数据收发 
  30.      
  31.         }catch(Exception e) 
  32.         { 
  33.             e.printStackTrace(); 
  34.         }
  35.     } 
  36.      
  37.     public class RunningThread extends Thread 
  38.     { 
  39.         private Socket msocket = null
  40.         RunningThread(Socket s) 
  41.         { 
  42.             this.msocket = s; 
  43.         } 
  44.         public void run() 
  45.         {    
  46.             byte [] pRecbyte = new byte[1024]; 
  47.             String sSend = "hello Client! this is Server"
  48.             byte [] pSendByte = new byte[1024]; 
  49.             pSendByte = sSend.getBytes(); 
  50.             while(true
  51.             { 
  52.                 try 
  53.                 { 
  54. DataInputStream sRead = new DataInputStream(msocket.getInputStream());  //读取 
  55. int nRec = sRead.read(pRecbyte); 
  56. if(nRec > 0 ) 
  57. //System.out.println("receive client message success!"); 
  58. DataOutputStream    sWrite = new DataOutputStream(msocket.getOutputStream());  
  59. sWrite.write(pSendByte);  //发送 
  60. break
  61. }    
  62.                 }catch(Exception e) 
  63.                 { 
  64. e.printStackTrace(); 
  65.                 } 
  66.             } 
  67.         } 
  68.     } 
阅读(521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
原文地址:https://www.cnblogs.com/black/p/5171663.html