android在wifi下手机与电脑的socket通信

 

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

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

核心代码如下:

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

作者博客:http://blog.csdn.net/menghnhhuan

 

手机建立socketServer代码

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地址代码

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代码如下

DWORD clientThreadID;
SOCKET    clientSock;
char      server_address[50] = {0};
char      recv_message_client[256] = {0};
struct    sockaddr_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;
}


 

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值