「已注销」 2015-11-07 14:32 采纳率: 25%
浏览 1419

我有一个关于java网络通信的问题

我先大概说一下,就是我这个程序有客户和服务器两部分,但是我只能实现客户向服务器的一次对话,服务器可以接收到来自客户的信息,但是以后客户说话或者服务器说话对方都不能接受到请问这是什么问题呀程序在下面希望大神们帮我看看,这对于一个初学者来说真的很重要!
客户端程序:
import java.awt.Color;
import java.awt.Container;
import java.io.*;
import java.net.*;

import javax.swing.*;

public class MyClient extends JFrame
{
public static void main (String args[])
{
JFrame jf=new JFrame("这是用户");
Container container=jf.getContentPane();
jf.setVisible(true); //设置窗体为可视
jf.setLayout(null); //窗体布局为网格
jf.setSize(600,500);
jf.setBackground(Color.BLUE);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JTextArea a=new JTextArea("",2,10);
container.add(a);
a.setBounds(10, 10, 100, 100);
try
{
Socket socket = new Socket("127.0.0.1",2017);
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader (socket.getInputStream()));
BufferedReader sin = new BufferedReader(new InputStreamReader (System.in));
String s,str;
do
{
s=sin.readLine();
out.println(s);
out.flush();//输出
a.setText("me: "+s);
str=in.readLine();
a.setText("he: "+str);

        }while(str!="bye");
        out.close();
        in.close();
        socket.close();
    }
    catch(Exception e)
    {}
}

}

服务器端程序:
import java.awt.Color;
import java.awt.Container;
import java.io.*;
import java.net.*;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.*;
public class MyServer extends JFrame
{

public static void main (String args[]){
    JFrame jf=new JFrame("这是服务器");
    Container container=jf.getContentPane();
    jf.setVisible(true);   //设置窗体为可视
    jf.setLayout(null);  //窗体布局为网格
    jf.setSize(600,500);
    jf.setBackground(Color.BLUE);
    jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    JTextArea a=new JTextArea("",2,10);
    container.add(a);
    a.setBounds(10, 10, 100, 100);
    try
    {
        ServerSocket server = new ServerSocket(2017);
        Socket socket=server.accept();


        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream());
        BufferedReader sin=new BufferedReader(new  InputStreamReader(System.in));


        String s,str;

        do
        {
            s=in.readLine();
            a.setText("he:  "+s);
            str=sin.readLine();
            out.println(str);
            out.flush();
            a.setText("me:  "+str);
        }while(s!="bye");
        {
            in.close();
            out.close();
            socket.close();
            server.close();
        }




    }catch(Exception e){
        System.out.println("Error:"+e);
    }
}

}
蛮烦大家了!非常感谢

  • 写回答

7条回答

  • qq_21333451 2015-11-07 14:58
    关注

    while(true) {Socket socket=server.accept();
    ……
    }
    加一个循环就好了
    Socket socket=server.accept();
    这个方法是堵塞的,只有客户端请求的时候才往下执行

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器