关于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-Fisocketandroid通信手机
代码哪里出问题了??真纠结:关键性代码:
服务端:
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-Fisocketandroid通信手机
但是电脑之间的就行,手机和电脑的就不行,好神奇啊
我晕了求指教哪里错了
经测试可行的
服务端代码:import java.net.*;
import java.io.*;
class TcpDemo
{
public static void main(String[] args)throws Exception
{
ServerSocket ss = new ServerSocket(115);
Socket s = ss.accept();
InputStream bais = new ByteArrayInputStream("ha ha ha ha ".getBytes());
OutputStream out = s.getOutputStream();
byte[] buff = new byte[1024];
int len = 0;
while((len = bais.read(buff)) > 0){
out.write(buff);
}
s.close();
System.out.println("TcpDemo:finish");
}
}服务端代码:import java.net.*;
import java.io.*;
class TcpClientDemo
{
public static void main(String[] args)throws Exception
{
Socket s = new Socket("169.254.205.180",220);
InputStream is = s.getInputStream();
byte[] buff = new byte[1024];
while(is.read(buff) > 0){
System.out.println(new String(buff,0,buff.length));
}
s.close();
}
}
cmd命令能查到电脑服务端的局域网的IP地址。。
没有报错信息
06-18 17:40:15.861: W/System.err(16619): android.os.NetworkOnMainThreadException访问网络的方法不可以在主线程里进行。需要起一个线程去链接socket,或则用AsyncTask。
当我启动线程运行的时候出现:
很抱歉,“xxxxx”已停止运行
运行不了代码更改以下:package hua.test.tcpsocketclient;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) {
new SocketClientThread().start();
}
});
}
class SocketClientThread extends Thread{
public void run(){
String buffer = new String();
TcpSocketClient tsc = new TcpSocketClient();
try {
//接收wifi
buffer = tsc.receiveWifi("192.168.226.56", 115);
} catch (Exception e) {
e.printStackTrace();
}
//设置接收来的内容
EditText editText02 = (EditText)MainActivity.this.findViewById(R.id.EditText02);
editText02.setText(buffer.toString()+"1111");
Toast.makeText(MainActivity.this, "receive",Toast.LENGTH_SHORT).show();
}
}
}我已经先把ip地址和端口固定了,服务端一直都在开着
当我启动线程运行的时候出现:
很抱歉,“xxxxx”已停止运行
运行不了代码更改以下:package hua.test.tcpsocketclient;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) {
new SocketClientThread().start();
}
});
}
class SocketClientThread extends Thread{
public void run(){
String buffer = new String();
TcpSocketClient tsc = new TcpSocketClient();
try {
//接收wifi
buffer = tsc.receiveWifi("192.168.226.56", 115);
} catch (Exception e) {
e.printStackTrace();
}
//设置接收来的内容
EditText editText02 = (EditText)MainActivity.this.findViewById(R.id.EditText02);
editText02.setText(buffer.toString()+"1111");
Toast.makeText(MainActivity.this, "receive",Toast.LENGTH_SHORT).show();
}
}
}我已经先把ip地址和端口固定了,服务端一直都在开着报错在eclipse的logcat可以看到日志。根据你的代码,我觉得socket通讯应该没问题。
但是你不可以在socket线程中去操作view对象。你需要用handler去处理。当然,如果你仅仅是测试socket,
你可以把结果打印到logcat,而不是放到EditText中。
当我启动线程运行的时候出现:
很抱歉,“xxxxx”已停止运行
运行不了代码更改以下:package hua.test.tcpsocketclient;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) {
new SocketClientThread().start();
}
});
}
class SocketClientThread extends Thread{
public void run(){
String buffer = new String();
TcpSocketClient tsc = new TcpSocketClient();
try {
//接收wifi
buffer = tsc.receiveWifi("192.168.226.56", 115);
} catch (Exception e) {
e.printStackTrace();
}
//设置接收来的内容
EditText editText02 = (EditText)MainActivity.this.findViewById(R.id.EditText02);
editText02.setText(buffer.toString()+"1111");
Toast.makeText(MainActivity.this, "receive",Toast.LENGTH_SHORT).show();
}
}
}我已经先把ip地址和端口固定了,服务端一直都在开着报错在eclipse的logcat可以看到日志。根据你的代码,我觉得socket通讯应该没问题。
但是你不可以在socket线程中去操作view对象。你需要用handler去处理。当然,如果你仅仅是测试socket,
你可以把结果打印到logcat,而不是放到EditText中。
+1。如果你想在SocketClientThread 里更新view,加一个looper吧
当我启动线程运行的时候出现:
很抱歉,“xxxxx”已停止运行
运行不了代码更改以下:package hua.test.tcpsocketclient;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) {
new SocketClientThread().start();
}
});
}
class SocketClientThread extends Thread{
public void run(){
String buffer = new String();
TcpSocketClient tsc = new TcpSocketClient();
try {
//接收wifi
buffer = tsc.receiveWifi("192.168.226.56", 115);
} catch (Exception e) {
e.printStackTrace();
}
//设置接收来的内容
EditText editText02 = (EditText)MainActivity.this.findViewById(R.id.EditText02);
editText02.setText(buffer.toString()+"1111");
Toast.makeText(MainActivity.this, "receive",Toast.LENGTH_SHORT).show();
}
}
}我已经先把ip地址和端口固定了,服务端一直都在开着报错在eclipse的logcat可以看到日志。根据你的代码,我觉得socket通讯应该没问题。
但是你不可以在socket线程中去操作view对象。你需要用handler去处理。当然,如果你仅仅是测试socket,
你可以把结果打印到logcat,而不是放到EditText中。
+1。如果你想在SocketClientThread 里更新view,加一个looper吧
谢谢提醒回复,上面之所以不行,只要是我权限没有设置,
但是现在又出问题了我用android做服务端,电脑做客户端
电脑收不到服务端发来的数据,电脑的那个客户端经测试这个是可以的package hua.tcpsocket;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
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) {
new ServerThread().start();
}
}
class ServerThread extends Thread{
public void run(){
//建立服务端
TcpSocketServer tss = new TcpSocketServer();
try {
tss.startWifi(221,"dsaaaa");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}