展开全部
这是服务器端:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
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_ChatClient extends JFrame
{
private ObjectInputStream m_input; // 输入流
private ObjectOutputStream m_output; // 输出流
private JTextField m_enter; // 输入区域32313133353236313431303231363533e4b893e5b19e31333264646561
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( );
} // try-catch结构结束
} // 方法actionPerformed结束
} // 实现接口ActionListener的内部类结束
); // addActionListener方法调用结束
c.add( m_enter, BorderLayout.NORTH );
m_display = new JTextArea( );
c.add( new JScrollPane( m_display ), BorderLayout.CENTER );
} // J_ChatClient构造方法结束
public void mb_displayAppend( String s )
{
m_display.append( s + "\n" );
m_display.setCaretPosition( m_display.getText( ).length( ) );
m_enter.requestFocusInWindow( ); // 转移输入焦点到输入区域
} // 方法mb_displayAppend结束
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);
} // 方法mb_isEndSession结束
public void mb_run( String host, int port)
{
try
{
mb_displayAppend("尝试连接");
Socket s = new Socket(host, port);
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 ));// do-while循环结束
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("发生异常");
} // try-catch结构结束
} // 方法mb_run结束
public static void main(String args[ ])
{
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("localhost", 5000);
else app.mb_run(args[0], 5000);
} // 方法main结束
} // 类J_ChatClient结束
这是客户端:
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( );
} // try-catch结构结束
} // 方法actionPerformed结束
} // 实现接口ActionListener的内部类结束
); // addActionListener方法调用结束
c.add( m_enter, BorderLayout.NORTH );
m_display = new JTextArea( );
c.add( new JScrollPane( m_display ), BorderLayout.CENTER );
} // J_ChatServer构造方法结束
public void mb_displayAppend( String s )
{
m_display.append( s + "\n" ); //将给定文本追加到文档结尾
//设置 TextComponent 的文本插入符的位置。注意,插入符可跟踪更改,所以如果组件的基础文本被更改,
//则此位置可能会移动。如果文档为 null,则不执行任何操作。位置必须在 0 和组件的文本长度之间,否则将抛出异常
m_display.setCaretPosition( m_display.getText( ).length( ) );
m_enter.requestFocusInWindow( ); // 转移输入焦点到输入区域
} // 方法mb_displayAppend结束
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);
} // 方法mb_isEndSession结束
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 ));// do-while循环结束
m_output.writeObject("q"); // 通知客户端退出程序
m_output.flush( );
m_enter.setEnabled( false );
m_output.close( );
m_input.close( );
s.close( );
mb_displayAppend("连接[" + m_clientNumber + "]结束" + " ");
} // while循环结束
}
catch (Exception e)
{
System.err.println("发生异常:" + e);
e.printStackTrace( );
mb_displayAppend("连接[" + m_clientNumber +"]发生异常" + " ");
} // try-catch结构结束
} // 方法mb_run结束
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( );
} // 方法main结束
} // 类J_ChatServer结束
楼主看看就应该懂了,我注释的很详细的,这个是我以前学Socket编程的时候,写的一个例子
追问
恩。。不知道你这是不是贴过来的,你这一段代码绝对不是回答我的提问的。大家注意鸟,他这段是一个简单的服务器和客户端的对话框,大家有需要的弄走了。这么多天没人回答,哎,伤心,不过我已经解决了。分就给你了。
本回答由提问者推荐
已赞过
已踩过<
你对这个回答的评价是?
评论
收起