一个同学弄了一个服务器与客户端界面通信的简单实现,其想法非常怪,发送消息竟然用线程死循环监听,用一个if语句判断点击按钮后得到文本框的字符串是否为‘’;不是则发送,是则循环。这个代码我看了以后也相当的无语,运行后非常卡,最后连eclipse也启动不了,死循环的后遗症.但是这毕竟是他自己的想法,也是一种提升。问题是客户端发服务器都能接收,服务器发客户端有时接受有时接受不到,我用System.out.pritnln("")跟踪了下,发现当服务器放松客户端接收不到的时候,服务器确实是发过去了,问题出现在客户端了,这个问题我也遇到过,那时是用了ObjectOutputStream造成并发异常也产生的,原因new了多个ObjectOutputStream对象,可是其他流应该没有这个异常吧。我怀疑是服务器发送客户端的时候,接受消息有两个处理函数。 我无能为力了,只能来请教给位java前辈。代码下面贴出.
解决方案 »
- 怎么把this is a demo string变为gnirts omed a si siht?并且子串demo顺序不变?
- struts2(2.1.8) 与spring集成 ApplicationContext属性注入 怎么是null?
- 关于hibernate出现的问题!!!!!!!
- 程序内嵌浏览器问题。。。。
- 配置sessionFactory 出错。不知是什么原因?
- 本人最近做了一个spring+hibernate+ajax+jstl为主体的的开源后台管理与开发平台系统,有意者请进!
- JTable中选择行并删除行的问题
- struts中jsp图象显示出问题,struts到底好在哪里?
- 新手求助--weblogic入门小问题--怎样知道建立一个JDBC Connection Pool已经成功??
- xml转换的问题!!!
- HibernateTemplate的findByCriteria关于排序问题求解
- java 如何实现豆瓣网登录,模拟post/get方式发送数据?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
Socket socket;
InputStream in;
OutputStream out;
FtpServerJFrame jf;
public Client(FtpServerJFrame jf) {
this.jf = jf;
}
public void open(String host, int port) throws Exception {
socket = new Socket(host, port);
in = socket.getInputStream();
out = socket.getOutputStream();
new send(socket,out).start();
new resver(socket, in).start();
}
class send extends Thread {//发送
Socket socket;
OutputStream out;
public send(Socket socket, OutputStream out) {
this.socket = socket;
this.out = out;
}
public void run() {
while (true) {
PrintWriter pw = new PrintWriter(out, true);
try {
// Scanner c = new Scanner(System.in);
if (!(jf.getWords()).equals("")) {
String str = jf.getWords();
pw.println(str);
jf.Empety();
System.out.println("发送成功!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
class resver extends Thread{//接收
Socket socket;
InputStream in;
public resver(Socket socket, InputStream in) {
this.socket = socket;
this.in = in;
}
public void run(){
while(true){
BufferedReader br = new BufferedReader(
new InputStreamReader(in));
try {
String mes;
mes = br.readLine();
System.out.println(mes);
if (!mes.equals("")) {
System.out.println(mes);
jf.setText(mes);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
FtpServerJFrame jf = new FtpServerJFrame();
Client c = new Client(jf);
Socket socket = new Socket("192.168.0.102", 7700);
c.open("192.168.0.102", 7700);
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;import day01.Clint.FtpServer.resver;public class ftp {
Socket socket;
InputStream in;
OutputStream out;
private String str ;
private FtpServerJFrame jf;
public ftp(FtpServerJFrame jf){
this.jf = jf;
}
public void listen(int port) throws Exception {
ServerSocket ss = new ServerSocket(port);
while(true){
socket = ss.accept();
in = socket.getInputStream();
out = socket.getOutputStream();
new send(socket,out).start();
new resver(socket, in).start();
}
}
class send extends Thread {//发送
Socket socket;
OutputStream out;
public send(Socket socket, OutputStream out) {
this.socket = socket;
this.out = out;
} public void run() {
while (true) {
PrintWriter pw = new PrintWriter(out, true);
try {
// Scanner c = new Scanner(System.in);
String cmd = jf.getWords();
if (!cmd.equals("")) {
//String str = jf.getWords();
pw.println(cmd);
System.out.println(cmd+"3");
jf.Empety();
System.out.println("发送成功!");
}
} catch (Exception e) {
e.printStackTrace();
}
} }
}
class resver extends Thread{//接收
Socket socket;
InputStream in;
public resver(Socket socket, InputStream in) {
this.socket = socket;
this.in = in;
}
public void run(){
while(true){
BufferedReader br = new BufferedReader(
new InputStreamReader(in));
try {
String mes;
if ((mes = br.readLine()) != null) {
System.out.println("运行了没有,服务器");
jf.setText(mes);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
FtpServerJFrame ftp = new FtpServerJFrame();
ftp ftp1 = new ftp(ftp);
ftp1.listen(7700);
}
}
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class FtpServerJFrame extends JFrame {
private JTextArea text;
private JTextArea mes;
String words="";
private JButton send;
private JButton cancel;
public FtpServerJFrame() {
super("服务器");
init();
}
public void init(){ setLayout(new BorderLayout());
setSize(600, 400);
add(create(),BorderLayout.CENTER);
add(createUp(),BorderLayout.SOUTH);
setVisible(true);
}
public JPanel createUp(){
JPanel pane = new JPanel();
send = new JButton("发送");
send.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
setWords();
}
});
cancel = new JButton("取消");
pane.add(send);
pane.add(cancel);
return pane;
} public JPanel create(){
JPanel pane = new JPanel (new GridLayout(2, 1));
pane.add(contentPane());
pane.add(createMessage());
return pane;
}
public JPanel contentPane(){
JPanel pane = new JPanel(new BorderLayout());
JTextArea t = new JTextArea("等待客户端连接....");
text = t;
pane.add(text,BorderLayout.CENTER);
return pane;
}
public JPanel createMessage(){
JPanel pane = new JPanel(new BorderLayout());
JTextArea t = new JTextArea("消息界面....");
mes = t;
pane.add(t,BorderLayout.CENTER);
return pane;
}
public void setText(String str){
text.setText(str);
}
public void setWords(){
words = mes.getText();
System.out.println(words+"1");
}
public String getWords(){
return words;
}
public void Empety(){
mes.setText("");
words = "";
}
public static void main(String[] args) throws Exception {
FtpServerJFrame a = new FtpServerJFrame();
}
}