java网络编程问题,静侯给位前辈

sgls652709 2012-08-12 02:52:10
一个同学弄了一个服务器与客户端界面通信的简单实现,其想法非常怪,发送消息竟然用线程死循环监听,用一个if语句判断点击按钮后得到文本框的字符串是否为‘’;不是则发送,是则循环。这个代码我看了以后也相当的无语,运行后非常卡,最后连eclipse也启动不了,死循环的后遗症.但是这毕竟是他自己的想法,也是一种提升。问题是客户端发服务器都能接收,服务器发客户端有时接受有时接受不到,我用System.out.pritnln("")跟踪了下,发现当服务器放松客户端接收不到的时候,服务器确实是发过去了,问题出现在客户端了,这个问题我也遇到过,那时是用了ObjectOutputStream造成并发异常也产生的,原因new了多个ObjectOutputStream对象,可是其他流应该没有这个异常吧。我怀疑是服务器发送客户端的时候,接受消息有两个处理函数。 我无能为力了,只能来请教给位java前辈。代码下面贴出.
...全文
70 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sgls652709 2012-08-14
  • 打赏
  • 举报
回复
沉了
sgls652709 2012-08-14
  • 打赏
  • 举报
回复
沉了
sgls652709 2012-08-12
  • 打赏
  • 举报
回复
就是服务器往客户端发送数据时,客户端有时可以收到有时收不到,不知是什么原因。
ylovep 2012-08-12
  • 打赏
  • 举报
回复
楼主说问题 代码太难看了
sgls652709 2012-08-12
  • 打赏
  • 举报
回复
package day01.Clint;
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();
}
}
sgls652709 2012-08-12
  • 打赏
  • 举报
回复
package day01.Clint;

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.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);
}
}
sgls652709 2012-08-12
  • 打赏
  • 举报
回复
客户端.

package day01;
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);
}
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧