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

关于小弟我的socket编程有关问题

2012-09-09 
关于我的socket编程问题麻烦各位大侠 帮我看一下程序 我写了一个客户端程序和服务器程序客户端程序如下:它

关于我的socket编程问题
麻烦各位大侠 帮我看一下程序 我写了一个客户端程序和服务器程序
客户端程序如下:
它的大体结构式 我写了九个按钮 每一个按钮都有一个监听器 每一个监听器的处理的事情就是发送一个socket请求给服务器端。
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;

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

public class UItestActivity extends Activity {
  /** Called when the activity is first created. */
   
  private Button button1;
  private Button button2;
  private Button button3;
  private Button button4;
  private Button button5;
  private Button button6;
  private Button button7;
  private Button button8;
  private Button button9;
  private EditText edt;
  public void Send(String sRemoteIP,int iRemotePort,String sCmd){
   
  try {
 
  InetSocketAddress remoteAddr = new InetSocketAddress(sRemoteIP,iRemotePort);
 
  Socket socket = new Socket();
   
  socket.connect(remoteAddr);
 
  System.out.println("zheshishenem");
  PrintWriter send = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())));
  send.println(sCmd);
  send.flush();

  send.close();
  socket.close();
  } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }

  }

  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  button1=(Button)findViewById(R.id.button1);
  button2=(Button)findViewById(R.id.button2);
  button3=(Button)findViewById(R.id.button3);
  button4=(Button)findViewById(R.id.button4);
  button5=(Button)findViewById(R.id.button5);
  button6=(Button)findViewById(R.id.button6);
  button7=(Button)findViewById(R.id.button7);
  button8=(Button)findViewById(R.id.button8);
  button9=(Button)findViewById(R.id.button9);
  edt=(EditText)findViewById(R.id.edt);
  button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
edt.setText("1");

Send("172.19.24.81", 1400, "1");

}
});
  button2.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  edt.setText("2");
  Send("172.19.24.81", 1400, "2");
 
  }
  });
  button3.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  edt.setText("3");
  Send("172.19.24.81", 1400, "3");
 
  }
  });
  button4.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  edt.setText("4");


  Send("172.19.24.81", 1400, "4");
 
  }
  });
  button5.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  edt.setText("5");
  Send("172.19.24.81", 1400, "5");
 
  }
  });
  button6.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  edt.setText("6");
  Send("172.19.24.81", 1400, "6");
 
  }
  });
  button7.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  edt.setText("7");
  Send("172.19.24.81", 1400, "7");
 
  }
  });
  button8.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  edt.setText("8");
  Send("172.19.24.81", 1400, "8");
 
  }
  });
  button9.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  edt.setText("9");
 
  Send("172.19.24.81", 1400, "9");
 
  }
  });
  }
}


服务器端的程序如下:
import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class UItext {
private static TextField teField;

public static void main(String[] args) {
teField=new TextField(30);
Frame f=new Frame();
Panel p1=new Panel();
p1.add(teField);
f.add(p1,BorderLayout.NORTH);
Panel p2=new Panel();
p2.setLayout(new GridLayout(3,3,4,4));
String [] name={"1","2","3","4","5","6","7","8","9"};
for(int i=0;i<name.length;i++)
{
p2.add(new Button(name[i]));
}

f.add(p2);
f.pack();
f.setVisible(true);

try {
ServerSocket serverSocket=new ServerSocket(1400);
Socket socket=serverSocket.accept();
InputStream inputStream=socket.getInputStream();
StringBuffer sb=new StringBuffer();
InputStreamReader isReader=new InputStreamReader(inputStream);
char [] buf=new char [20];
int len=0;
while((len=isReader.read(buf))!=-1)
{
sb.append(new String(buf,0,len));
 
}
serverSocket.close();
socket.close();
teField.setText(sb.toString()); 

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}

}

出现的问题是:当我按第一个按钮的时候是可以发送给服务器端 但是按第二个按钮的时候 服务器端就收不到了

[解决办法]
服务器端只是单线程,就只能接收1个了,要接收多个的话要做成多线程
[解决办法]
Server 中 加上while 循环
------解决方案--------------------


Tcp协议是有状态的连接,需要服务器不停的监听
[解决办法]

探讨
引用:

Server 中 加上while 循环

这个方法貌似没有用呢 用了线程池解的呢

热点排行