Android 模擬器(JAVA)與C++ socket 通訊 分享
更新時間: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é)商版本號
{
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(); //新建一個線程進(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ī)的端口號,在模擬器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é)商版本號
{
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(); //新建一個線程進(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ī)的端口號,在模擬器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的解析以及雙方即時通訊的java實(shí)現(xiàn)方法
- Java的Socket通訊基礎(chǔ)編程完全指南
- 基于Java語言實(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ān)文章
ImageView簡單加載網(wǎng)絡(luò)圖片實(shí)例代碼
使用ImageView實(shí)現(xiàn)簡單加載網(wǎng)絡(luò)圖片的功能,示例代碼如下,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-06-06Flutter利用Hero組件實(shí)現(xiàn)自定義路徑效果的動畫
本篇介紹了如何利用Hero動畫組件的createRectTween屬性實(shí)現(xiàn)自定義路徑效果的動畫。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-06-06Android使用surfaceView自定義抽獎大轉(zhuǎn)盤
這篇文章主要為大家詳細(xì)介紹了Android使用surfaceView自定義抽獎大轉(zhuǎn)盤,熟練掌握SurfaceVie實(shí)現(xiàn)抽獎大轉(zhuǎn)盤,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12Android SharePreferences與數(shù)據(jù)庫SQLite存儲實(shí)現(xiàn)方法介紹
這篇文章主要介紹了Android SharePreferences與數(shù)據(jù)庫SQLite用于存儲的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-09-09Android編程使用pull方式解析xml格式文件的方法詳解
這篇文章主要介紹了Android編程使用pull方式解析xml格式文件的方法,結(jié)合實(shí)例形式分析了Android調(diào)用pull解析器操作xml格式文件的步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07android開發(fā)教程之實(shí)現(xiàn)listview下拉刷新和上拉刷新效果
這篇文章主要介紹了android實(shí)現(xiàn)listview下拉刷新和上拉刷新效果,Android的ListView上拉下拉刷新,原理都一樣,在Touch事件中操作header/footer的paddingTop屬性,需要的朋友可以參考下2014-02-02