Android系统socket通信时需要进行平板电脑设置么?

秋暮严冬 发布于 2012/06/20 09:45
阅读 662
收藏 1

目前我是在平板电脑上进行测试,想做一个最简单的socket通信。客户端在平板电脑上,android的。服务器端在PC上。代码如下。我尝试了用相似两个java程序进行pc与pc之间的socket通信是没有问题的。但是进行android与pc的socket通信就总连不上。android和pc互相能够ping上,但是socket总是连不上,求大神帮我看看是怎么回事?这种通信需要在平板电脑上进行什么设置么?

Server上的

import java.io.*;
import java.net.*;
public class Server {
	
	private int port=8000;
	private ServerSocket serverSocket;
	
	public Server() throws IOException {
	serverSocket = new ServerSocket(port,20); //连结请求队列的长度为3
	System.out.println("服务器启动");
	}
	
	public void service() {
		while (true) {
			Socket socket=null;
			try {
				socket = serverSocket.accept(); //从连结请求队列中取出一个连结
				System.out.println("New connection accepted " +socket.getInetAddress() + ":" +socket.getPort());
			}catch (IOException e) {
				e.printStackTrace();
			}finally {
				try{
					if(socket!=null)socket.close();
				}catch (IOException e) {e.printStackTrace();}
				}
		}
	}
	
	public static void main(String args[])throws Exception {
		Server server=new Server();
		//Thread.sleep(60000*10); //睡眠十分钟
		server.service();
		}
}

Client上的:

package org.example.socketclient;

import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;


public class SocketclientActivity extends Activity {
    private TextView  mTextView = null;
    private Button mButton = null;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mButton = (Button) this.findViewById(R.id.button);
        mButton.setText("Connect to server");
        mTextView = (TextView) this.findViewById(R.id.textview);  
        mTextView.setText("Waiting");
        /*mEditText = (EditText) this.findViewById(R.id.edittext);
        mima =(EditText) this.findViewById(R.id.edittext2);*/
        mButton.setOnClickListener(new Button.OnClickListener(){			
			public void onClick(View v) {
				mTextView.setText("Prepare to connect...");
				try {
					final int length=100;
					String host="192.168.0.146";
					int port=8000;
					
					Socket[] socket=new Socket[length];
					for (int i=1;i<length;i++){
						socket[i]=new Socket(host,port);
						//System.out.println("Connection "+i+" times");
						mTextView.setText("Connection "+i+" times");
					}Thread.sleep(3000);
					for (int i=1;i<length;i++){
						socket[i].close();
						mTextView.setText("close...");
					}
				} catch (UnknownHostException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					mTextView.setText("hh");
				}catch (Exception e){
					e.printStackTrace();
					mTextView.setText("ee");}
				}
    });
    }
 }

AndroidManifest里面,在<application...  之前加入了
    <uses-sdk android:minSdkVersion="12" />
	<uses-permission android:name="android.permission.INTERNET" />
    <application
        
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

这个加入的位置正确么?

加载中
0
敬水仙
敬水仙

建议在真机上测试!!下面两篇聊天室的文章和实例应该对你有帮助!

http://www.eoeandroid.com/thread-68874-1-1.html 

http://www.cnblogs.com/-run/archive/2011/12/29/2306363.html

0
Monkey
Monkey
看异常啊,连不上总有异常信息什么啊。
0
fneg
fneg
你应该把连接那一部分写到线程里去,不要放在主线程,会阻塞,然后强制关闭的。而且看你的地址是192.*,那样的话要保证测试的机子和你的主机在同一个局域网里面
秋暮严冬
秋暮严冬
感谢,不过原谅小弟鲁钝。你说的是server还是client的连接部分应该放到线程里去?具体是那一段呢?
0
李图斌
李图斌
请问,这个问题你解决了么?我现在也遇到了这个问题!求共享啊!
0
李图斌
李图斌
我的邮箱是leoltbsg@qq.com
返回顶部
顶部