读书人

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

发布时间: 2012-09-09 09:27:54 作者: rapoo

关于我的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 循环

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

读书人网 >Android

热点推荐