首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

关于socket,同一个wifi,为啥电脑局域网能通信,手机就不能?

2013-06-26 
关于socket,同一个wifi,为什么电脑局域网能通信,手机就不能??关于socket,同一个wifi,为什么电脑局域网能通

关于socket,同一个wifi,为什么电脑局域网能通信,手机就不能??
关于socket,同一个wifi,为什么电脑局域网能通信,手机就不能??
代码哪里出问题了??真纠结:

关键性代码:
服务端:
TcpSocketServer :


package hua.tcpsocket;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpSocketServer {
public TcpSocketServer(){

}
public void startWifi(int port,String buffer)throws Exception{
//新建ServerSocket对象,端口为传进来的port;
ServerSocket ss = new ServerSocket(port);
//新建Socket通信对象,接受客户端发来的请求accept();
Socket s = ss.accept();
//创建输入流对象InputStream
InputStream bais = new ByteArrayInputStream(buffer.getBytes());
//创建输出流对象OutputStream
OutputStream out = s.getOutputStream();
byte[] buff = new byte[1024];
while(bais.read(buff) > 0){
out.write(buff);
}
s.close();
}
}

服务端的:
MainActivity:

package hua.tcpsocket;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonStartWifi = (Button) this.findViewById(R.id.startWifi);
buttonStartWifi.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
//获取字符串缓冲区buffer
EditText bufferEditText = (EditText)MainActivity.this.findViewById(R.id.buffer);
String buffer = bufferEditText.getText().toString();
//获取端口port
EditText portEditText = (EditText)MainActivity.this.findViewById(R.id.port);
String port = portEditText.getText().toString();
//建立服务端
TcpSocketServer tss = new TcpSocketServer();
try {
//开始发射wifi信号
tss.startWifi(Integer.parseInt(port),buffer);
} catch (Exception e) {
e.printStackTrace();
}
//提示信息
Toast.makeText(MainActivity.this, "started",Toast.LENGTH_SHORT).show();
}
});
}
class ServerThread extends Thread{
public void run(){

}
}
}




客户端的:
TcpSocketClient :
package hua.temp;


import java.io.InputStream;
import java.net.Socket;

public class TcpSocketClient {
public TcpSocketClient(){

}
public String receiveWifi(String ip,int port)throws Exception{
//新建Socket通信对象
Socket s = new Socket(ip,port);
//创建输入流对象InputStream
InputStream is = s.getInputStream();
byte[] buff = new byte[1024];
StringBuffer buffer = new StringBuffer();
while(is.read(buff) > 0){
buffer.append(buff);

s.close();
return buffer.toString();


}
}



客户端的:
MainActivity :
package hua.temp;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button b = (Button)this.findViewById(R.id.button);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//获取ip输入地址
EditText ipEditText   = (EditText)MainActivity.this.findViewById(R.id.ip);
//获取port端口
EditText portEditText = (EditText)MainActivity.this.findViewById(R.id.port);
//建立TcpSocketClient对象
TcpSocketClient tsc = new TcpSocketClient();

String ip = ipEditText.getText().toString();
String port = portEditText.getText().toString();
String buffer = new String();

try {
//接收wifi
buffer = tsc.receiveWifi(ip, Integer.parseInt(port));
} catch (Exception e) {
e.printStackTrace();
}

//设置接收来的内容
EditText editText02 = (EditText)MainActivity.this.findViewById(R.id.EditText02);
editText02.setText(buffer);
Toast.makeText(MainActivity.this, "receive",Toast.LENGTH_SHORT).show();
}
});
}
}


搞了三四天都搞不出??哪里出问题了?? Wi-Fi socket android 通信 手机
[解决办法]

06-18 17:40:15.861: W/System.err(16619): android.os.NetworkOnMainThreadException

访问网络的方法不可以在主线程里进行。

需要起一个线程去链接socket,或则用AsyncTask。

[解决办法]
你的端口用的是多少?还想是必须大于1024的端口才行。

热点排行