/////////////////////////////////////////////////////////////Android server

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.util.Enumeration;

import android.app.Activity;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;

public class ActivityServer extends Activity {
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Thread desktopServerThread = new Thread(new TCPDesktopServer());
desktopServerThread.start();
}

public class TCPDesktopServer implements Runnable {
//public static final String SERVERIP="192.168.1.100";
public static final int SERVERPORT=51706;
@Override
public void run() {
try{
Log.d("TCP","服务器:正在连接..."+getLocalIpAddress());
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
//SocketAddress sa = serverSocket.getLocalSocketAddress();


while(true){
Socket client = serverSocket.accept();
Log.d("TCP","服务器:正在接收...");

InetAddress addr = serverSocket.getInetAddress();
Log.d("TCP","Connection from==>" + addr.getHostName()
+ "/t" + addr.getHostAddress());
try{
Log.d("TCP","__________1");
BufferedReader in = new BufferedReader(new
InputStreamReader(client.getInputStream()));
Log.d("TCP","__________2");
//String str = in.readLine();
char data[] = new char[1024];
int len = in.read(data);
char dataRe[] = new char[len];
System.arraycopy(data, 0, dataRe, 0, len);
String str = new String(dataRe);
Log.d("TCP","服务器:接收到:'" + str + "'");

}catch(Exception e){
Log.d("TCP","服务器:出错!");
e.printStackTrace();
}
finally{
client.close();
System.out.println("服务器:关闭。");
}
}
}catch(Exception e){
System.out.println("服务器:出错!");
e.printStackTrace();
}

}
}

public String getLocalMacAddress() {
WifiManager wifi = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
return info.getMacAddress();
}

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()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("WifiPreference IpAddress", ex.toString());
}
return null;
}
}

/////////////////////////////////////////////////////////////////////////////////////////////Android Client

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class ActivityClient extends Activity implements OnClickListener{
/** Called when the activity is first created. */
//private final int TIMER_INVALIDATE = 10001;
private final int TIMER_INVALIDATE = 51706;
private String SOCKET_IP = "192.168.50.132";
//private String SOCKET_IP = "192.168.50.247";
private int SOCKET_PORT = 51706;
private Button mBtnConnet;
private Button mBtnClose;
private Button mBtnSend;
Socket socket = null;
private String mStrShow;
private TextView mText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mText = (TextView)findViewById(R.id.text_show);
mBtnConnet = (Button)findViewById(R.id.btn_connect);
mBtnClose = (Button)findViewById(R.id.btn_close);
mBtnSend = (Button)findViewById(R.id.btn_send);
mBtnConnet.setOnClickListener(this);
mBtnClose.setOnClickListener(this);
mBtnSend.setOnClickListener(this);
}

public void connect(){
try {
InetAddress serverAddr = InetAddress.getByName(SOCKET_IP);//TCPServer.SERVERIP
Log.d("TCP", "C: Connecting...");
socket = new Socket(serverAddr, SOCKET_PORT);


// PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
// out.println(message);
// out.flush();
// receive();
} catch(Exception e) {
Log.e("TCP", "S: Error", e);
} finally {

}
}

public void receive(){
new Thread(){
public void run(){
try{
while(!socket.isClosed()){

InputStream is = socket.getInputStream();

byte data[] = new byte[1024];
int n = is.read(data);
if(n > 0){
String val = new String(data);
mStrShow += val;
Log.d("TCP","receive mStrShow="+mStrShow);
Message message = new Message();// 生成消息,并赋予ID值
message.what = TIMER_INVALIDATE;
myHandler.sendMessage(message);// 投递消息
}

sleep(300);
}
}
catch(Exception e){

}
}
}.start();
}
private void close(){
try {
Log.d("TCP","socket close");
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("TCP", "S: Error", e);
}
}

private void send(){
try{
String message = "AndroidRes,Where is my Pig (Android)?";
Log.d("TCP", "C: Sending: '" + message + "'");
mStrShow = "C: Sending: '" + message + "'";
mText.setText(mStrShow);

PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message);
//out.flush();

}catch(Exception e){
e.printStackTrace();
}
}
Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case TIMER_INVALIDATE:
mText.setText(mStrShow);
break;
}
super.handleMessage(msg);
}
};
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId() == R.id.btn_connect){
connect();
}
else if(v.getId() == R.id.btn_close){
close();
}
else if(v.getId() == R.id.btn_send){
send();
}

}
}

///////////////////////////////////////////////////////////////////////////////////////////PC server C++

#include <windows.h>
#include <winsock.h>
#include <iostream>
#pragma comment( lib,"Ws2_32.lib")
#define DEFAULT_PORT 51706
SOCKET m_Listening;

typedef struct
{
int firstArgu;
long secArgu;
}myType,* pMyType;

int Receive(SOCKET fd,char *szText,int len)
{
int cnt, rc;
cnt=len;
while(cnt>0)
{
rc=recv(fd,szText,cnt,0);
if(rc==SOCKET_ERROR)
{
return -1;
}
if(rc==0)
return len-cnt;
szText+=rc;
cnt-=rc;
}
return len;
}

int Send(SOCKET fd,char *szText,int len)
{
int cnt, rc;
cnt=len;
while(cnt>0)
{
rc=send(fd,szText,cnt,0);
if(rc==SOCKET_ERROR)
{
return -1;
}
if(rc==0)
return len-cnt;
szText+=rc;
cnt-=rc;
}
return len;
}
DWORD WINAPI ListenThread(LPVOID lpparam)
{
char szBuf[MAX_PATH];
int cc = 0;
//初始化
memset(szBuf,0,MAX_PATH);
SOCKET ConnectSocket=((pMyType)lpparam)->firstArgu;
printf("开始接收 socketid=%d\n",ConnectSocket);
while(1)
{
int n =recv(ConnectSocket,szBuf,MAX_PATH,0);
printf("接收:%s\n",szBuf);
//向客户端发送回应数据
if(cc % 4 == 0){
Send(ConnectSocket,szBuf,n);
}
cc++;
}

return 0;
}

int main(int argc, char* argv[])
{
WSADATA wsaData;
if(WSAStartup(0x0110,&wsaData)) //调用Windows Sockets DLL
{
puts("Winsock无法初始化!");
return -1;
}
DWORD dwThreadID = 0;
sockaddr_in local;
//DWORD dwThreadID = 0;
local.sin_family=AF_INET;
//设置的端口为DEFAULT_PORT。
local.sin_port=htons(DEFAULT_PORT);

//local.sin_port=htons(DEFAULT_PORT);
//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。
local.sin_addr.S_un.S_addr=INADDR_ANY;//inet_addr("127.0.0.1");
//初始化Socket
m_Listening=socket(AF_INET,SOCK_STREAM,0);
if(m_Listening == INVALID_SOCKET)
{
puts("创建Winsock实例失败!");
return -1;
}
if(bind(m_Listening,(LPSOCKADDR)&local,sizeof(local)) == SOCKET_ERROR )
{
closesocket(m_Listening);
puts("绑定端口失败!");
return -1;
}
if(listen(m_Listening,40) == SOCKET_ERROR)
{
puts("监听端口失败!");
return -1;
}
puts("启动成功");
char szBuf[MAX_PATH];
//初始化
memset(szBuf,0,MAX_PATH);
int ct = 0;
while(1)
{
SOCKET ConnectSocket;
sockaddr_in ClientAddr;
int nLen = sizeof(sockaddr);
//阻塞直到有客户端连接,不然多浪费CPU资源。
ConnectSocket = accept(m_Listening,(sockaddr*)&ClientAddr,&nLen);
//都到客户端的IP地址。
char *pAddrname = inet_ntoa(ClientAddr.sin_addr);
printf("登录:%s socketid=%d\n",pAddrname,ConnectSocket);

myType param;
param.firstArgu=ConnectSocket;
param.secArgu=100000000;
::CreateThread(NULL,0,ListenThread,&param,0,NULL);
}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////PC Client c++

#include <stdio.h>
#include <Winsock2.h>

#pragma comment(lib,"ws2_32.lib")

#define MAX_BUF_SIZE 1024
#define PORT_NUMBER 51706

int client()
{
WSADATA wSaData;
WORD dwSockVersion = MAKEWORD(2,2);
if (0 != WSAStartup(dwSockVersion,&wSaData)) //?????
{
printf("Arrange Version Failure");
return -1;
}

SOCKET nSocket;
nSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //??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("192.168.50.132");
//sa.sin_addr.s_addr = inet_addr("192.168.50.247");
sa.sin_port = htons(51706);
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);
printf("nSend=%d/n",nSend);
int nRecv = 0;
nRecv = recv(nSocket, buf, MAX_BUF_SIZE, 0);
printf("nRecv=%d/n",nRecv);
if (nRecv > 0)
{
printf("%s/n",buf);
}
closesocket(nSocket);
WSACleanup();
}


int server()
{

return 0;
}

int main(int argc, char* argv[])
{
client();

return 0;
}


源码下载http://download.csdn.net/detail/notepaper/3911879

更多相关文章

  1. 动态库so打包到android apk
  2. android的WebView简单实例
  3. 自定义的Spinner文字居中
  4. 【Android】利用广播Broadcast接收SMS短信
  5. 【Android】动态注册广播接收器
  6. android - 确认订单页面【仿】京东App
  7. android (back)返回键监听
  8. Android与服务器通信的方法之一-->TCP
  9. Android(安卓)FTP客户端使用,快速上传文件

随机推荐

  1. android错误之ListView设置setOnItemClic
  2. 用Eclipse编译android程序时,出现警告Thi
  3. unity3d引用android第三方sdk
  4. [置顶] Android硬件加速
  5. 浅谈Android中常用的五种布局方式
  6. android中context及全局变量小析
  7. Android温故之-Service
  8. 如何添加 android private libraries 中
  9. 高通平台 lcd driver 调试小结
  10. Android的位置和地图