Android 模擬器(JAVA)與C++ socket 通訊

來源:互聯網
上載者:User

C++ 作為Client端

[cpp]
view plaincopy
  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端

 

[java]
view plaincopy
  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版本。測試通過。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.