Android 模擬器(JAVA)與C++ socket 通訊 分享
更新時(shí)間:2013年05月27日 11:07:02 作者:
Android 模擬器(JAVA)與C++ socket 通訊 分享,需要的朋友可以參考一下
C++ 作為Client端
view plaincopy to clipboardprint?
// Client.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#pragma comment(lib,"ws2_32.lib")
#define MAX_BUF_SIZE 1024
#define PORT_NUMBER 12581
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wSaData;
WORD dwSockVersion = MAKEWORD(2,2);
if (0 != WSAStartup(dwSockVersion,&wSaData)) //協(xié)商版本號(hào)
{
printf("Arrange Version Failure");
return -1;
}
SOCKET nSocket;
nSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //創(chuàng)建TCP socket
if (INVALID_SOCKET == nSocket)
{
printf("invalid socket");
WSACleanup();
return -1;
}
sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("127.0.0.1");
sa.sin_port = htons(PORT_NUMBER);
if ( 0 != connect( nSocket,( const SOCKADDR * )&sa, sizeof(sa) ) )
return -1;
char buf[MAX_BUF_SIZE] = {0};
char tmp[MAX_BUF_SIZE] = {0};
strcpy(tmp,"this is Client!");
int nSend = send(nSocket, tmp, (int)strlen(tmp), 0);
int nRecv = 0;
nRecv = recv(nSocket, buf, MAX_BUF_SIZE, 0);
if (nRecv > 0)
{
printf("%s\n",buf);
}
closesocket(nSocket);
WSACleanup();
return 0;
}
Android 模擬器,JAVA作為Serve端
view plaincopy to clipboardprint?
package com.Android.SocketTest;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
public class SocketTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
StartAcceptSocket();
}
private void StartAcceptSocket()
{
try
{
short nPort = 31012;
ServerSocket m_pServerSocket = new ServerSocket(nPort); //初始化socket
Socket pAccSocket = m_pServerSocket.accept(); //accept 阻塞等待
new RunningThread(pAccSocket).start(); //新建一個(gè)線程進(jìn)行數(shù)據(jù)收發(fā)
}catch(Exception e)
{
e.printStackTrace();
}
}
public class RunningThread extends Thread
{
private Socket msocket = null;
RunningThread(Socket s)
{
this.msocket = s;
}
public void run()
{
byte [] pRecbyte = new byte[1024];
String sSend = "hello Client! this is Server";
byte [] pSendByte = new byte[1024];
pSendByte = sSend.getBytes();
while(true)
{
try
{
DataInputStream sRead = new DataInputStream(msocket.getInputStream()); //讀取
int nRec = sRead.read(pRecbyte);
if(nRec > 0 )
{
//System.out.println("receive client message success!");
DataOutputStream sWrite = new DataOutputStream(msocket.getOutputStream());
sWrite.write(pSendByte); //發(fā)送
break;
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
}
}
android 模擬器使用的IP 地址為"127.0.0.1";使用PC機(jī)的端口號(hào),在模擬器TCP連接調(diào)試之前必須使用android sdk 使用的工具進(jìn)行一次端口映射。如圖所示。即使用 Sdk 中的Tools下abd 工具,在cmd 窗口中運(yùn)行E:\\install\\android\\Android\\android-sdk-windwows\\tools\\adb forward tcp:12581 tcp:31012" 前面目錄為android sdk Tools 所在目錄。根據(jù)本機(jī)情況而定。
view plaincopy to clipboardprint?
復(fù)制代碼 代碼如下:
// Client.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#pragma comment(lib,"ws2_32.lib")
#define MAX_BUF_SIZE 1024
#define PORT_NUMBER 12581
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wSaData;
WORD dwSockVersion = MAKEWORD(2,2);
if (0 != WSAStartup(dwSockVersion,&wSaData)) //協(xié)商版本號(hào)
{
printf("Arrange Version Failure");
return -1;
}
SOCKET nSocket;
nSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //創(chuàng)建TCP socket
if (INVALID_SOCKET == nSocket)
{
printf("invalid socket");
WSACleanup();
return -1;
}
sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("127.0.0.1");
sa.sin_port = htons(PORT_NUMBER);
if ( 0 != connect( nSocket,( const SOCKADDR * )&sa, sizeof(sa) ) )
return -1;
char buf[MAX_BUF_SIZE] = {0};
char tmp[MAX_BUF_SIZE] = {0};
strcpy(tmp,"this is Client!");
int nSend = send(nSocket, tmp, (int)strlen(tmp), 0);
int nRecv = 0;
nRecv = recv(nSocket, buf, MAX_BUF_SIZE, 0);
if (nRecv > 0)
{
printf("%s\n",buf);
}
closesocket(nSocket);
WSACleanup();
return 0;
}
Android 模擬器,JAVA作為Serve端
view plaincopy to clipboardprint?
復(fù)制代碼 代碼如下:
package com.Android.SocketTest;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
public class SocketTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
StartAcceptSocket();
}
private void StartAcceptSocket()
{
try
{
short nPort = 31012;
ServerSocket m_pServerSocket = new ServerSocket(nPort); //初始化socket
Socket pAccSocket = m_pServerSocket.accept(); //accept 阻塞等待
new RunningThread(pAccSocket).start(); //新建一個(gè)線程進(jìn)行數(shù)據(jù)收發(fā)
}catch(Exception e)
{
e.printStackTrace();
}
}
public class RunningThread extends Thread
{
private Socket msocket = null;
RunningThread(Socket s)
{
this.msocket = s;
}
public void run()
{
byte [] pRecbyte = new byte[1024];
String sSend = "hello Client! this is Server";
byte [] pSendByte = new byte[1024];
pSendByte = sSend.getBytes();
while(true)
{
try
{
DataInputStream sRead = new DataInputStream(msocket.getInputStream()); //讀取
int nRec = sRead.read(pRecbyte);
if(nRec > 0 )
{
//System.out.println("receive client message success!");
DataOutputStream sWrite = new DataOutputStream(msocket.getOutputStream());
sWrite.write(pSendByte); //發(fā)送
break;
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
}
}
android 模擬器使用的IP 地址為"127.0.0.1";使用PC機(jī)的端口號(hào),在模擬器TCP連接調(diào)試之前必須使用android sdk 使用的工具進(jìn)行一次端口映射。如圖所示。即使用 Sdk 中的Tools下abd 工具,在cmd 窗口中運(yùn)行E:\\install\\android\\Android\\android-sdk-windwows\\tools\\adb forward tcp:12581 tcp:31012" 前面目錄為android sdk Tools 所在目錄。根據(jù)本機(jī)情況而定。
您可能感興趣的文章:
- 關(guān)于Socket的解析以及雙方即時(shí)通訊的java實(shí)現(xiàn)方法
- Java的Socket通訊基礎(chǔ)編程完全指南
- 基于Java語(yǔ)言實(shí)現(xiàn)Socket通信的實(shí)例
- java使用MulticastSocket實(shí)現(xiàn)組播
- java使用MulticastSocket實(shí)現(xiàn)基于廣播的多人聊天室
- java+jdbc+mysql+socket搭建局域網(wǎng)聊天室
- java 實(shí)現(xiàn)websocket的兩種方式實(shí)例詳解
- java socket實(shí)現(xiàn)聊天室 java實(shí)現(xiàn)多人聊天功能
- Java socket通訊實(shí)現(xiàn)過(guò)程及問(wèn)題解決
相關(guān)文章
Android變形(Transform)之Camera使用介紹
Camera主要實(shí)現(xiàn)3D的變形,有轉(zhuǎn)動(dòng),旋轉(zhuǎn)等,Camera的源碼是由Native(本地代碼)實(shí)現(xiàn),提供的接口也比較簡(jiǎn)單,感興趣的朋友可以參考下,或許對(duì)你學(xué)習(xí)有所幫助2013-02-02
Android Flutter自適應(yīng)瀑布流案例詳解
這篇文章主要介紹了Android Flutter自適應(yīng)瀑布流案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
Android基礎(chǔ)之使用Fragment適應(yīng)不同屏幕和分辨率(分享)
以下是對(duì)Fragment的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-07-07
Android列表控件Spinner簡(jiǎn)單用法示例
這篇文章主要介紹了Android列表控件Spinner簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了Android列表控件Spinner的布局與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
Android 動(dòng)畫(huà)(View動(dòng)畫(huà),幀動(dòng)畫(huà),屬性動(dòng)畫(huà))詳細(xì)介紹
這篇文章主要介紹了Android View動(dòng)畫(huà)、幀動(dòng)畫(huà)和屬性動(dòng)畫(huà)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10
Android仿UC底部菜單欄實(shí)現(xiàn)原理與代碼
最近剛看完ViewPager,開(kāi)始我打算用自定義的imgBtn,但是發(fā)現(xiàn)放在pager選項(xiàng)卡中不好排版,所以最好選了GridView,接下來(lái)介紹底部菜單欄實(shí)現(xiàn)2013-01-01

