android 使用socket与pc传递对象的问题

... by 机器人 ... 7 月 1 天前 ... 302 次点击

本帖最后由 gaos928 于 2009-12-9 20:19 编辑



项目需要android与pc机实现自定义对象的传递,设计先将对象序列化然后通过tcp socket进行通信,目前emulator可以实现自发自收,但是pc向android emulator发送对象的时候抛出Eception,代码如下。望牛人指点,不胜感激
emulator上的tcp serverpackage client.tcp;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

import android.util.Log;

public class TCPAndroidServer extends Thread {

public static final String SERVERIP = "localhost" ;
public static final int SERVERPORT = 5557 ;
public TcpClient TcpClient_;
public void run() {
try {
System.out.println( "S: Connecting..." );


while ( true ) {
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
Socket client = serverSocket.accept();
System.out.println( "S: Receiving..." );

try {
InputStream ips = client.getInputStream();
ObjectInputStream ois = new ObjectInputStream(ips);
SetupParameter setupParameter_=new SetupParameter();
setupParameter_=(SetupParameter)ois.readObject();
String str = setupParameter_.getMessage();
System.out.println( "S: Received: '" + str + "'" );
serverSocket.close();
} catch (Exception e) {
System.out.println( "S: Error" );
e.printStackTrace();
} finally {
client.close();
System.out.println( "S: Done." );
}

}

} catch (Exception e) {
System.out.println( "S: Error" );
e.printStackTrace();
}
}
}复制代码emulator 上的tcp client
package client.tcp;
import java.io.*;
import java.net.*;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class TcpClient extends Activity {
? ? protected EditText sendEditText_;
? ? protected EditText receiveEditText_;
? ? protected Button sendButton_;
? ? protected Button receiveButton_;
? ? DatagramSocket socket;
? ? InetAddress serverAddr;
OnClickListener sendListener = null;
OnClickListener receiveListener = null;
? ? /** Called when the activity is first created. */
? ? @Override
? ? public void onCreate(Bundle savedInstanceState) {
? ?? ???super.onCreate(savedInstanceState);? ?? ???
? ?? ???setContentView(R.layout.main);
??TCPAndroidServer server=new TCPAndroidServer();
? ?? ???new Thread(server).start();? ?
? ?? ???/* GIve the Server some time for startup */??
? ?? ???try {? ?
? ?? ?? ?? ?? ?Thread.sleep(500);? ?
? ?? ?? ? } catch (InterruptedException e) { }? ?
??sendListener = new OnClickListener()
??{
? ?SetupParameter setupParameter_=new SetupParameter();
? ?public void onClick(View v)
? ?{
? ? TCPAndroidClient client=new TCPAndroidClient();
? ?? ?? ? new Thread(client).start();? ?
? ?}
??};
??receiveListener = new OnClickListener()
??{
? ?public void onClick(View v)
? ?{
? ?? ?? ? //receiveEditText_.setText(server.receivedMessage+"/n");
? ?}
??};
??receiveEditText_=(EditText)findViewById(R.id.EditTextReceivedMessages);
??sendButton_=(Button)findViewById(R.id.ButtonSend);
??sendButton_.setOnClickListener(sendListener);
??receiveButton_=(Button)findViewById(R.id.ButtonReceive);
??receiveButton_.setOnClickListener(receiveListener);
??sendEditText_=(EditText)findViewById(R.id.EditTextSendMessages);
? ? }

class TCPAndroidClient extends Thread
{
? ?//??public static final String SERVERIP = "localhost" ;
//? ? public static final int SERVERPORT = 5557 ;
? ???public TcpClient TcpClient_;
/*? ? TCPAndroidClient(TcpClient tcpClient){
? ?? ?TcpClient_=tcpClient;
? ???}*/
? ???public void run() {? ?? ?
? ?? ?? ? try{
? ?? ?? ???SetupParameter setupParameter_=new SetupParameter();
? ?? ?? ???InetAddress serverAddr = InetAddress.getByName( "localhost" ); //TCPServer.SERVERIP
? ?? ?? ???Log.d( "TCP" , "C: Connecting..." );
? ?? ?? ???Socket socket = new Socket(serverAddr, 5557 );
? ?? ?? ???Log.d( "TCP" , "C: Connected" );
? ?? ?? ???String message = sendEditText_.getText().toString();
? ?? ?? ???setupParameter_.setMessage(message);
? ?? ?? ???setupParameter_.setServerId(serverAddr.toString());
? ?? ?? ???setupParameter_.setTopicName("topic1");
? ?? ?? ???Log.d( "TCP" , "C: Sending: '" + message + "'" );
? ?? ?? ?? ?? ???OutputStream ops = socket.getOutputStream();
? ?? ?? ?? ?? ???ObjectOutputStream oos = new ObjectOutputStream(ops);
? ?? ?? ?? ?? ???oos.writeObject(setupParameter_);
? ?? ?? ?? ?? ???Log.d( "TCP" , "sending" );
? ?? ?? ???//oos.println(message);
? ?? ?? ???socket.close();
? ?? ?? ? } catch (Exception e) {
? ?? ?? ?? ?? ?? ? Log.e( "TCP" , "S: Error" , e);
? ?? ?? ? }
? ???}
}复制代码pc上的tcp client
import java.io.*;
import java.net.*;

public class TCPDesktopClient extends Thread{
? ?public RunPanel runPanel_;
? ?private SetupParameter setupParameter_=new SetupParameter();
? ?TCPDesktopClient(RunPanel runPanel)
? ?{
? ? runPanel_=runPanel;
? ?}
? ?public void run() {
? ?? ? try{
? ?? ?? ?
? ?? ?? ?InetAddress serverAddr = InetAddress.getByName( "localhost" ); //TCPServer.SERVERIP
? ?? ?? ?System.out.println("C: Connecting" +serverAddr.toString()+"..." );
? ?? ?? ?Socket socket = new Socket(serverAddr, 5557);? ?? ?? ?
? ?? ?? ?System.out.println( "create socket success" );
? ?? ?? ?String message = runPanel_.sendTextArea_.getText().toString();??
? ?? ?? ?setupParameter_.setMessage(message);
? ?? ?? ?setupParameter_.setServerId(serverAddr.toString());
? ?? ?? ?setupParameter_.setTopicName("topic1");
? ?? ?? ?System.out.println( "C: Sending: '" + message + "'" );
? ?? ?? ?? ?OutputStream ops = socket.getOutputStream();
? ?? ?? ?? ?ObjectOutputStream oos = new ObjectOutputStream(ops);
? ?? ?? ?? ?oos.writeObject(setupParameter_);
? ?? ?? ?? ?System.out.println( "send to server success" );
? ?? ???// PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true );
? ?? ???// out.println(message);
? ?? ?? ?socket.close();
? ?? ? } catch (Exception e) {
? ?? ???System.out.println( "failure connecting server" );
? ?? ? }
? ?}
public boolean isRunning() {
// TODO Auto-generated method stub
return false;
}
}复制代码数据结构类
import java.io.Serializable;
import java.util.Hashtable;
/**
* Setup panel for the ProdCons demo.
* Allows to setup the different parameters.
*/
public class SetupParameter implements Serializable{
? ? private static final long serialVersionUID = 1L;
private String Message;
private String serverId;
private String topicName;
public void setMessage(String message)
{
??Message=message;
}
public void setServerId(String id)
{
??serverId=id;
}

public void setTopicName(String name){
??topicName=name;
}
public String getMessage()
{
??return Message;
}
public String getServerId()
{
??return serverId;
}
public String getTopicName()
{
??return topicName;
}
}复制代码异常

更多相关文章

  1. [Android]从新旧API看android代码演进
  2. Android(安卓)命名规范 (提高代码可以读性)
  3. Android(安卓)中的dm-verity
  4. iOS从业者的Android初体验
  5. 开机提示“Android正在升级...”
  6. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
  7. Android(安卓)框架模式 MVC 在Android中的使用
  8. Handler知识点总结
  9. 两张图让你完全了解IDEA和Android(安卓)Studio所有快捷键

随机推荐

  1. android alipay
  2. android蓝牙开发入门到精通1---蓝牙基础
  3. http://source.android.com/ android官网
  4. android 的getX和getRawX
  5. android设置全屏显示
  6. Use HTC 816t and Eclipse on Ubuntu to
  7. Android spanned SPAN_INCLUSIVE_INCLUSI
  8. android 9.0获取mac地址的方法
  9. cocos2d-x win7 搭建 android 开发环境==
  10. 在Android里面实现复制粘贴功能