展会信息港展会大全

android在wifi下手机与电脑的socket通信
来源:互联网   发布日期:2015-09-28 16:12:28   浏览:2029次  

导读:在wifi局域网下,手机可以和电脑通过socket通信。手机做服务端,电脑做客户端;也可以反过来,电脑做服务端,手机做客户端。下面介绍的是手机作为服务端,电脑使用MFC编程作为客户端,原理是...

在wifi局域网下,手机可以和电脑通过socket通信。手机做服务端,电脑做客户端;也可以反过来,电脑做服务端,手机做客户端。

下面介绍的是手机作为服务端,电脑使用MFC编程作为客户端,原理是,手机建立一个ServerSocket,并获取自己的ip地址和端口port;然后电脑通过socket连接手机的ip:port。

代码下载地址:http://download.csdn.net/detail/menghnhhuan/4050488

手机建立socketServer代码

[html] private ServerSocket serverSocket = null;

private RunnablemcreateRunnable = new Runnable()

{

public void run()

{

try {

serverSocket = new ServerSocket(0);//系统分配端口

getLocalIpAddress();//获得手机的ip地址

//方法用于等待客服连接

mSocketServer = serverSocket.accept();

//接受客服端数据BufferedReader对象

mBufferedReaderServer = new BufferedReader(new InputStreamReader(mSocketServer.getInputStream()));

//给客服端发送数据

mPrintWriterServer = new PrintWriter(mSocketServer.getOutputStream(),true);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

};

private ServerSocket serverSocket = null;

private Runnable mcreateRunnable = new Runnable()

{

public void run()

{

try {

serverSocket = new ServerSocket(0);//系统分配端口

getLocalIpAddress();//获得手机的ip地址

//方法用于等待客服连接

mSocketServer = serverSocket.accept();

//接受客服端数据BufferedReader对象

mBufferedReaderServer = new BufferedReader(new InputStreamReader(mSocketServer.getInputStream()));

//给客服端发送数据

mPrintWriterServer = new PrintWriter(mSocketServer.getOutputStream(),true);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

};

手机上获取的ip地址代码

[html] public String getLocalIpAddress()

{

try {

for (Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)

{

NetworkInterface intf = en.nextElement();

for (Enumeration<InetAddress> enumIpAddr=intf.getInetAddresses();enumIpAddr.hasMoreElements();)

{

InetAddress inetAddress = enumIpAddr.nextElement();

//if (!inetAddress.isLoopbackAddress())

{

//if(inetAddress.isSiteLocalAddress())

{

String ip = "请连接IP:"+inetAddress.getHostAddress()+":"

+ serverSocket.getLocalPort()+ "\n";

}

}

}

}

}

catch (SocketException ex) {

ex.printStackTrace();}

}

public String getLocalIpAddress()

{

try {

for (Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)

{

NetworkInterface intf = en.nextElement();

for (Enumeration<InetAddress> enumIpAddr=intf.getInetAddresses();enumIpAddr.hasMoreElements();)

{

InetAddress inetAddress = enumIpAddr.nextElement();

//if (!inetAddress.isLoopbackAddress())

{

//if(inetAddress.isSiteLocalAddress())

{

String ip = "请连接IP:"+inetAddress.getHostAddress()+":"

+ serverSocket.getLocalPort()+ "\n";

}

}

}

}

}

catch (SocketException ex) {

ex.printStackTrace(); }

}

电脑上使用的是MFC编程,socket代码如下

[html] DWORD clientThreadID;

SOCKETclientSock;

charserver_address[50] = {0};

charrecv_message_client[256] = {0};

structsockaddr_in server_ip;

BOOL clientThreadRun = false;

//client

BOOL InItClientSock()

{

//Define Variable

WORD wVersionrequested;

WSADATA wsaData;

wVersionrequested = MAKEWORD(2,0);

//Start Sock

int err = WSAStartup(wVersionrequested,&wsaData);

if (err == -1)

{

MessageBox(0,"WSAStartup err", "error",MB_OK);

return FALSE;

}

return TRUE;

}

BOOL ConnectSock()

{

SOCKET clientSockConnect;

u_short port;

//Ini Sock

clientSock = socket(AF_INET,SOCK_STREAM,0);

if (ServerSock < 0)

{

MessageBox(0,"scoker err",

"err",MB_OK);

return FALSE;

}

char *strPort = strstr(server_address, ":");

if( (strPort!=NULL) && (strlen(strPort)>2) )

{

port = atoi(strPort+1);

if(port==0)

{

MessageBox(0, "IP端口不对, 参考例子:192.168.12.134:8981", "提示", MB_OK);

return FALSE;

}

memset(strPort, 0, sizeof(strPort));

}

else

{

MessageBox(0, "IP地址不对, 参考例子:192.168.12.134:8981", "提示", MB_OK);

return FALSE;

}

//Connect

server_ip.sin_family = AF_INET;

server_ip.sin_port = ((port&0xff00)>>8)|((port&0x00ff)<<8);

server_ip.sin_addr.S_un.S_addr = inet_addr(server_address);

clientSockConnect = connect(clientSock,(struct sockaddr*)&server_ip,sizeof(server_ip));

if (clientSockConnect!=0)

{

CString temp;

temp.Format("系统拒绝连接,可能是输入IP地址或端口不对:\n%s:%d", server_address, server_ip.sin_port);

SetDlgItemText( FindWindow(NULL, WINDOWNHANDLERNAME), IDC_STATIC_IP, temp);

MessageBox(0, "系统拒绝连接,可能是输入IP地址或端口不对 ", "提示", MB_OK);

return FALSE;

}

return TRUE;

}

DWORD WINAPI clientThreadFunc(LPVOID threadNum)

{

int length;

CString temp;

if(!InItClientSock())

return 0;

if(!ConnectSock())

return 0;

//等待连接的时候,连接可能被取消。

if(clientThreadRun)

SetDlgItemText(FindWindow(NULL, WINDOWNHANDLERNAME), IDC_STATIC_IP, "已经连接上!");

else

{

SetDlgItemText(FindWindow(NULL, WINDOWNHANDLERNAME), IDC_STATIC_IP, "请启动服务!");

return 0;

}

//send(NewSock,(char*)&FALG,sizeof(FALG)+1,MSG_OOB);

while(clientThreadRun)

{

if( (length = recv(clientSock,(char*)recv_message_client,sizeof(recv_message_client),0))>0)

{

//MessageBox(0, recv_message, "接收到的信息", MB_OK);

temp.Format("接收到的信息:\n%s",recv_message_client);

SetDlgItemText(FindWindow(NULL, WINDOWNHANDLERNAME), IDC_STATIC_IP, temp);

analyseCommand(recv_message_client);

memset(recv_message_client, 0, sizeof(recv_message_client));

}

temp.Format("接收到的信息:\n%s",recv_message_client);

}

return 0;

}

DWORD clientThreadID;

SOCKETclientSock;

charserver_address[50] = {0};

charrecv_message_client[256] = {0};

structsockaddr_in server_ip;

BOOL clientThreadRun = false;

//client

BOOL InItClientSock()

{

//Define Variable

WORD wVersionrequested;

WSADATA wsaData;

wVersionrequested = MAKEWORD(2,0);

//Start Sock

int err = WSAStartup(wVersionrequested,&wsaData);

if (err == -1)

{

MessageBox(0,"WSAStartup err", "error",MB_OK);

return FALSE;

}

return TRUE;

}

BOOL ConnectSock()

{

SOCKET clientSockConnect;

u_short port;

//Ini Sock

clientSock = socket(AF_INET,SOCK_STREAM,0);

if (ServerSock < 0)

{

MessageBox(0,"scoker err",

"err",MB_OK);

return FALSE;

}

char *strPort = strstr(server_address, ":");

if( (strPort!=NULL) && (strlen(strPort)>2) )

{

port = atoi(strPort+1);

if(port==0)

{

MessageBox(0, "IP端口不对, 参考例子:192.168.12.134:8981", "提示", MB_OK);

return FALSE;

}

memset(strPort, 0, sizeof(strPort));

}

else

{

MessageBox(0, "IP地址不对, 参考例子:192.168.12.134:8981", "提示", MB_OK);

return FALSE;

}

//Connect

server_ip.sin_family = AF_INET;

server_ip.sin_port = ((port&0xff00)>>8)|((port&0x00ff)<<8);

server_ip.sin_addr.S_un.S_addr = inet_addr(server_address);

clientSockConnect = connect(clientSock,(struct sockaddr*)&server_ip,sizeof(server_ip));

if (clientSockConnect!=0)

{

CString temp;

temp.Format("系统拒绝连接,可能是输入IP地址或端口不对:\n%s:%d", server_address, server_ip.sin_port);

SetDlgItemText( FindWindow(NULL, WINDOWNHANDLERNAME), IDC_STATIC_IP, temp);

MessageBox(0, "系统拒绝连接,可能是输入IP地址或端口不对 ", "提示", MB_OK);

return FALSE;

}

return TRUE;

}

DWORD WINAPI clientThreadFunc(LPVOID threadNum)

{

int length;

CString temp;

if(!InItClientSock())

return 0;

if(!ConnectSock())

return 0;

//等待连接的时候,连接可能被取消。

if(clientThreadRun)

SetDlgItemText(FindWindow(NULL, WINDOWNHANDLERNAME), IDC_STATIC_IP, "已经连接上!");

else

{

SetDlgItemText(FindWindow(NULL, WINDOWNHANDLERNAME), IDC_STATIC_IP, "请启动服务!");

return 0;

}

//send(NewSock,(char*)&FALG,sizeof(FALG)+1,MSG_OOB);

while(clientThreadRun)

{

if( (length = recv(clientSock,(char*)recv_message_client,sizeof(recv_message_client),0))>0)

{

//MessageBox(0, recv_message, "接收到的信息", MB_OK);

temp.Format("接收到的信息:\n%s",recv_message_client);

SetDlgItemText(FindWindow(NULL, WINDOWNHANDLERNAME), IDC_STATIC_IP, temp);

analyseCommand(recv_message_client);

memset(recv_message_client, 0, sizeof(recv_message_client));

}

temp.Format("接收到的信息:\n%s",recv_message_client);

}

return 0;

}

摘自 menghnhhuan的专栏

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港