急求课后习题的答案:Java程序设计教程(第2版) 雍俊海 编著 清华大学出版社 本人qq邮箱是[email protected]谢谢哥哥姐姐了, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 服务器端的代码import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.net.ServerSocket;import java.net.Socket;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import javax.swing.JFrame;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JScrollPane;public class J_ChatServer extends JFrame{ private ObjectInputStream m_input; private ObjectOutputStream m_output; private JTextField m_enter; private JTextArea m_display; private int m_clientNumber=0; public J_ChatServer() { super("聊天程序服务器端"); Container c=getContentPane(); m_enter=new JTextField(); m_enter.setEnabled(false); m_enter.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { try { String s=event.getActionCommand(); m_output.writeObject(s); m_output.flush(); mb_displayAppend("服务器端:"+s); m_enter.setText(""); } catch(Exception e) { System.err.println(e); e.printStackTrace(); } } } ); c.add(m_enter,BorderLayout.NORTH); m_display=new JTextArea(); c.add(new JScrollPane(m_display),BorderLayout.CENTER); } public void mb_displayAppend(String s) { m_display.append(s+"\n"); m_display.setCaretPosition(m_display.getText().length()); m_enter.requestFocusInWindow(); } public boolean mb_isEndSession(String m) { if(m.equalsIgnoreCase("q")) return (true); if(m.equalsIgnoreCase("quit")) return (true); if(m.equalsIgnoreCase("exit")) return (true); if(m.equalsIgnoreCase("end")) return (true); if(m.equalsIgnoreCase("结束")) return (true); return false; } public void mb_run() { try { ServerSocket server=new ServerSocket(5000); String m; while(true) { m_clientNumber++; mb_displayAppend("等待连接["+m_clientNumber+"]"); Socket s=server.accept(); mb_displayAppend("接收到客户端链接["+m_clientNumber+"]"); m_output=new ObjectOutputStream(s.getOutputStream()); m_input=new ObjectInputStream(s.getInputStream()); m_output.writeObject("连接成功"); m_output.flush(); m_enter.setEnabled(true); do { m=(String)m_input.readObject(); mb_displayAppend("客户端:"+m); }while(!mb_isEndSession(m)); m_output.writeObject("q"); m_output.flush(); m_enter.setEnabled(false); m_output.close(); m_input.close(); s.close(); mb_displayAppend("连接["+m_clientNumber+"]结束"); } } catch(Exception e) { System.err.println(e); e.printStackTrace(); mb_displayAppend("连接["+m_clientNumber+"]发生异常"); } } public static void main(String args[]) { J_ChatServer app =new J_ChatServer(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(350,150); app.setVisible(true); app.mb_run(); }} 客户端的代码import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.net.Socket;import java.net.UnknownHostException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.JTextArea;import javax.swing.JScrollPane;import java.net.InetAddress;public class J_ChatClient extends JFrame{ private ObjectInputStream m_input; private ObjectOutputStream m_output; private JTextField m_enter; private JTextArea m_display; public J_ChatClient() { super("聊天程序客户端"); Container c=getContentPane(); m_enter=new JTextField(); m_enter.setEnabled(false); m_enter.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { try { String s=event.getActionCommand(); m_output.writeObject(s); m_output.flush(); mb_displayAppend("客户端:"+s); m_enter.setText(""); } catch(Exception e) { System.err.println(e); e.printStackTrace(); } } } ); c.add(m_enter,BorderLayout.NORTH); m_display=new JTextArea(); c.add(new JScrollPane(m_display),BorderLayout.CENTER); } public void mb_displayAppend(String s) { m_display.append(s+"\n"); m_display.setCaretPosition(m_display.getText().length()); m_enter.requestFocusInWindow(); } public boolean mb_isEndSession(String m) { if(m.equalsIgnoreCase("q")) return (true); if(m.equalsIgnoreCase("quit")) return (true); if(m.equalsIgnoreCase("exit")) return (true); if(m.equalsIgnoreCase("end")) return (true); if(m.equalsIgnoreCase("结束")) return (true); return false; } public void mb_run(InetAddress host,int port) { try { mb_displayAppend("尝试连接"); Socket s=new Socket (host,port);//host可以是InetAddress类型吗,好像没这个构造方法啊 String m; m_output=new ObjectOutputStream(s.getOutputStream()); m_input=new ObjectInputStream(s.getInputStream()); m_enter.setEnabled(true); do { m=(String)m_input.readObject(); mb_displayAppend("服务器端:"+m); }while(!mb_isEndSession(m)); m_output.writeObject("q"); m_output.flush(); m_output.close(); m_input.close(); s.close(); System.exit(0); } catch(Exception e) { System.err.println(e); e.printStackTrace(); mb_displayAppend("发生异常:"); } } public static void main(String args[]) throws UnknownHostException { byte[]s=new byte[]{(byte)192,(byte) 168,(byte)0,(byte)101}; /*InetAddress ts=null; try { ts=InetAddress.getByAddress(s); } catch(UnknownHostException e) { System.err.println(e); e.printStackTrace(); }*/ J_ChatClient app=new J_ChatClient(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(350,150); app.setVisible(true); //if(args.length==0) app.mb_run(InetAddress.getByAddress(s), 5000); //else app.mb_run(args[0], 5000); }} 我这个课本的tcp程序只能实现简单的服务器与客户端通信。。第五题是:把这个程序改成多线程的可以实现多个客户端与服务器聊天的功能。第六题是:把这个程序改成udp协议下的程序,实现同样的功能。 java解决约瑟夫问题 java命令行编程链接自己写的jar库出的一个问题,求教! 请教一个使按钮焦点的显示突出的问题 线程的问题..希望有人帮忙. 帮我看看这个程序 我改了好久,还是没结果.谢谢了~~~ 如何在批处理文件中获取当前的路径,实在不知道该贴在哪儿,因为是做java的时候遇到的问题,就贴这儿吧。 如何在一个按钮里加上同时加上图标和文字? 关于线程同步的问题! 关于组合问题(TIJ2nd P272) JAVA 中怎么构造占两个字节(16位)的对象 小模拟服务器和客户端,出现了很奇怪的问题!谁知道··· Java初学者 求教 在做一个小游戏时 如何加入音乐?
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JScrollPane;public class J_ChatServer extends JFrame
{
private ObjectInputStream m_input;
private ObjectOutputStream m_output;
private JTextField m_enter;
private JTextArea m_display;
private int m_clientNumber=0;
public J_ChatServer()
{
super("聊天程序服务器端");
Container c=getContentPane();
m_enter=new JTextField();
m_enter.setEnabled(false);
m_enter.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
try
{
String s=event.getActionCommand();
m_output.writeObject(s);
m_output.flush();
mb_displayAppend("服务器端:"+s);
m_enter.setText("");
}
catch(Exception e)
{
System.err.println(e);
e.printStackTrace();
}
}
}
);
c.add(m_enter,BorderLayout.NORTH);
m_display=new JTextArea();
c.add(new JScrollPane(m_display),BorderLayout.CENTER);
}
public void mb_displayAppend(String s)
{
m_display.append(s+"\n");
m_display.setCaretPosition(m_display.getText().length());
m_enter.requestFocusInWindow();
}
public boolean mb_isEndSession(String m)
{
if(m.equalsIgnoreCase("q"))
return (true);
if(m.equalsIgnoreCase("quit"))
return (true);
if(m.equalsIgnoreCase("exit"))
return (true);
if(m.equalsIgnoreCase("end"))
return (true);
if(m.equalsIgnoreCase("结束"))
return (true);
return false;
}
public void mb_run()
{
try
{
ServerSocket server=new ServerSocket(5000);
String m;
while(true)
{
m_clientNumber++;
mb_displayAppend("等待连接["+m_clientNumber+"]");
Socket s=server.accept();
mb_displayAppend("接收到客户端链接["+m_clientNumber+"]");
m_output=new ObjectOutputStream(s.getOutputStream());
m_input=new ObjectInputStream(s.getInputStream());
m_output.writeObject("连接成功");
m_output.flush();
m_enter.setEnabled(true);
do
{
m=(String)m_input.readObject();
mb_displayAppend("客户端:"+m);
}while(!mb_isEndSession(m));
m_output.writeObject("q");
m_output.flush();
m_enter.setEnabled(false);
m_output.close();
m_input.close();
s.close();
mb_displayAppend("连接["+m_clientNumber+"]结束");
}
}
catch(Exception e)
{
System.err.println(e);
e.printStackTrace();
mb_displayAppend("连接["+m_clientNumber+"]发生异常");
}
}
public static void main(String args[])
{
J_ChatServer app =new J_ChatServer();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(350,150);
app.setVisible(true);
app.mb_run();
}}
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.net.InetAddress;
public class J_ChatClient extends JFrame
{
private ObjectInputStream m_input;
private ObjectOutputStream m_output;
private JTextField m_enter;
private JTextArea m_display;
public J_ChatClient()
{
super("聊天程序客户端");
Container c=getContentPane();
m_enter=new JTextField();
m_enter.setEnabled(false);
m_enter.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
try
{
String s=event.getActionCommand();
m_output.writeObject(s);
m_output.flush();
mb_displayAppend("客户端:"+s);
m_enter.setText("");
}
catch(Exception e)
{
System.err.println(e);
e.printStackTrace();
}
}
}
);
c.add(m_enter,BorderLayout.NORTH);
m_display=new JTextArea();
c.add(new JScrollPane(m_display),BorderLayout.CENTER);
}
public void mb_displayAppend(String s)
{
m_display.append(s+"\n");
m_display.setCaretPosition(m_display.getText().length());
m_enter.requestFocusInWindow();
}
public boolean mb_isEndSession(String m)
{
if(m.equalsIgnoreCase("q"))
return (true);
if(m.equalsIgnoreCase("quit"))
return (true);
if(m.equalsIgnoreCase("exit"))
return (true);
if(m.equalsIgnoreCase("end"))
return (true);
if(m.equalsIgnoreCase("结束"))
return (true);
return false;
}
public void mb_run(InetAddress host,int port)
{
try
{
mb_displayAppend("尝试连接");
Socket s=new Socket (host,port);//host可以是InetAddress类型吗,好像没这个构造方法啊
String m;
m_output=new ObjectOutputStream(s.getOutputStream());
m_input=new ObjectInputStream(s.getInputStream());
m_enter.setEnabled(true);
do
{
m=(String)m_input.readObject();
mb_displayAppend("服务器端:"+m);
}while(!mb_isEndSession(m));
m_output.writeObject("q");
m_output.flush();
m_output.close();
m_input.close();
s.close();
System.exit(0);
}
catch(Exception e)
{
System.err.println(e);
e.printStackTrace();
mb_displayAppend("发生异常:");
}
}
public static void main(String args[]) throws UnknownHostException
{
byte[]s=new byte[]{(byte)192,(byte) 168,(byte)0,(byte)101};
/*InetAddress ts=null;
try
{
ts=InetAddress.getByAddress(s);
}
catch(UnknownHostException e)
{
System.err.println(e);
e.printStackTrace();
}*/
J_ChatClient app=new J_ChatClient();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(350,150);
app.setVisible(true);
//if(args.length==0)
app.mb_run(InetAddress.getByAddress(s), 5000);
//else app.mb_run(args[0], 5000);
}}
第五题是:把这个程序改成多线程的可以实现多个客户端与服务器聊天的功能。
第六题是:把这个程序改成udp协议下的程序,实现同样的功能。