zoukankan      html  css  js  c++  java
  • 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) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    288.软件开发过程与软件测试
    287.软件测试概述
    离散数学课程重点
    博客园美化
    渗透测试-Getshell总结
    C++迭代器
    每日一题2
    计算机网络面试总结(传输层)
    每日一题-1
    网络安全必备技能
  • 原文地址:https://www.cnblogs.com/black/p/5171663.html
Copyright © 2011-2022 走看看