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

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.     }     
  50.   
  51.     closesocket(nSocket);     
  52.     WSACleanup();     
  53.    
  54.     return 0;     
  55. }    

 

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.   
  23.     private void StartAcceptSocket()   
  24.     {  
  25.   
  26.         try  
  27.         {               
  28.             short nPort = 31012;  
  29.             ServerSocket m_pServerSocket = new ServerSocket(nPort); //初始化socket  
  30.             Socket pAccSocket = m_pServerSocket.accept(); //accept 阻塞等待  
  31.             new RunningThread(pAccSocket).start();  //新建一个线程进行数据收发  
  32.       
  33.         }catch(Exception e)  
  34.         {  
  35.             e.printStackTrace();  
  36.         }  
  37.   
  38.     }  
  39.       
  40.     public class RunningThread extends Thread  
  41.     {  
  42.         private Socket msocket = null;  
  43.         RunningThread(Socket s)  
  44.         {  
  45.             this.msocket = s;  
  46.         }  
  47.         public void run()  
  48.         {     
  49.             byte [] pRecbyte = new byte[1024];  
  50.             String sSend = "hello Client! this is Server";  
  51.             byte [] pSendByte = new byte[1024];  
  52.             pSendByte = sSend.getBytes();  
  53.             while(true)  
  54.             {  
  55.                 try  
  56.                 {  
  57.                     DataInputStream sRead = new DataInputStream(msocket.getInputStream());  //读取  
  58.                     int nRec = sRead.read(pRecbyte);  
  59.                     if(nRec > 0 )  
  60.                     {  
  61.                         //System.out.println("receive client message success!");  
  62.                         DataOutputStream    sWrite = new DataOutputStream(msocket.getOutputStream());   
  63.                         sWrite.write(pSendByte);  //发送  
  64.                         break;  
  65.                     }     
  66.                 }catch(Exception e)  
  67.                 {  
  68.                     e.printStackTrace();  
  69.                 }  
  70.           
  71.             }  
  72.   
  73.         }  
  74.     }  
  75. }  

 

android 模拟器使用的IP 地址为"127.0.0.1";使用PC机的端口号,在模拟器TCP连接调试之前必须使用android sdk 使用的工具进行一次端口映射。如图所示。即使用 Sdk 中的Tools下adb 工具,在cmd 窗口中运行E://install//android//Android//android-sdk-windwows//tools//adb forward tcp:12581 tcp:31012" 前面目录为android sdk  Tools 所在目录。根据本机情况而定。

 

程序C++ 部分编程环境vs 2005 android 采用eclipse 下 android 2.1版本。测试通过。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值