Server端:
package com.wjy.server; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; /* * caution:boot the server first. * @author JiyuanWang * */ public class TalkServer extends JFrame implements ActionListener,Runnable{ private JButton send=null; private JTextField inputText=null; private JTextArea showText=null; private ServerSocket serverSocket=null; private DataOutputStream out=null; public TalkServer(){ } public void handle() { try { serverSocket=new ServerSocket(4170, 5); while (true) { Socket socket=serverSocket.accept(); showText.append("Connect successd.\n"); Thread thread=new ThreadHandle(socket); thread.start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub /*try { out.writeUTF(inputText.getText()); out.flush();//本人一直把这个程序调试不通,最后发现没加这句话导致服务端显示不了客户端的输入。 showText.append("I said: "+inputText.getText()+"\n"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }*/ } @Override public void run() { // TODO Auto-generated method stub send=new JButton("Send"); send.addActionListener(this); send.setEnabled(true); inputText=new JTextField(); showText=new JTextArea(); add(send,BorderLayout.NORTH); add(inputText, BorderLayout.SOUTH); add(showText, BorderLayout.CENTER); setTitle("Server"); setBounds(1000,0,400,400); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); handle(); } private class ThreadHandle extends Thread{ private Socket midSocket; public ThreadHandle(Socket midSocket){ this.midSocket=midSocket; } public void run() { try { DataInputStream dataInputStream=new DataInputStream(midSocket.getInputStream()); DataOutputStream dataOutputStream=new DataOutputStream(midSocket.getOutputStream()); while(true){ showText.append("Client said: "+dataInputStream.readUTF()+"\n"); } } catch (Exception e) { // TODO: handle exception } } } }
Client端:
package com.wjy.client; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; /** * caution:boot the server first. * @author JiyuanWang * */ public class TalkClient extends JFrame implements ActionListener,Runnable{ private JButton send=null; private JTextField inputText=null; private JTextArea showText=null; private Socket socket=null; private DataInputStream inputStreamReader=null; private DataOutputStream outputStreamWriter=null; public TalkClient(){ } public void handle() { try { socket=new Socket("127.0.0.1",4170); inputStreamReader=new DataInputStream(socket.getInputStream()); outputStreamWriter=new DataOutputStream(socket.getOutputStream()); while(true){ showText.append("The Server said: "+inputStreamReader.readUTF()+"\n"); } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub try { outputStreamWriter.writeUTF(inputText.getText()); outputStreamWriter.flush(); //本人一直把这个程序调试不通,最后发现没加这句话导致服务端显示不了客户端的输入。 showText.append("I said: "+inputText.getText()+"\n"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } @Override public void run() { // TODO Auto-generated method stub send=new JButton("Send"); send.addActionListener(this); send.setEnabled(true); inputText=new JTextField(); showText=new JTextArea(); add(send,BorderLayout.NORTH); add(inputText, BorderLayout.SOUTH); add(showText, BorderLayout.CENTER); setTitle("Client"); setBounds(0,0,400,400); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); handle(); } }
main函数:
package start; import java.io.IOException; import java.net.ServerSocket; import com.wjy.client.TalkClient; import com.wjy.server.TalkServer; public class start { public static void main(String[] args){ Thread server=new Thread(new TalkServer()); Thread clientA=new Thread(new TalkClient()); Thread clientB=new Thread(new TalkClient()); server.start(); clientA.start(); clientB.start(); } }
相关推荐
实现一个服务器对多个客户端的关键是,在服务端的使用集合CPtrList类用保存客户端的socket对象,思想与Java中的编程思想一样,只不过Java中会使用多线程技术,在Vector集合保存客户端的socket对象,而MFC框架提供了...
图形界面编程,利用socket和UDP/TCP编写,客户端和服务端程序可以进行多次对话。实现了一对一多次对话,里面运用了网络编程和多线程编程。
一个Socket实例代表了TCP连接的一个客户端,而一个ServerSocket实例代表了TCP连接的一个服务器端,一般在TCP Socket编程中,客户端有多个,而服务器端只有一个,客户端TCP向服务器端TCP发送连接请求,服务器端的...
网络聊天室是一种应用广泛网络聊天方式,操作简单,功能丰富,本论文是JAVA语言设计和实现一个网络聊天室的过程,采用C/S架构设计,整个项目分为服务器和客户端。使用了JAVA 2中SWING组件,开发出简洁美观的用户和...
系统采用c/s架构,不是简单的单机版! 当然,你可以服务端、客户端都在同一台电脑上...通过此项目,可以学习了解到C/S模式、java Swing图形界面编程、java 多线程、java Socket网络编程、java对数据库的操作等知识。
本文使用的网络编程模型是客户端/服务端(C/S)结构,遵循TCP和UDP协议,网络聊天功能通过socket模块实现,用户在客户端上登录到指定端口的服务端与其他用户进行网络聊天。服务器启动后,等待客户端的连接,转发客户端指定...
本文使用的网络编程模型是客户端/服务端(C/S)结构,遵循TCP和UDP协议,网络聊天功能通过socket模块实现,用户在客户端上登录到指定端口的服务端与其他用户进行网络聊天。服务器启动后,等待客户端的连接,转发客户端指定...
Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...
用j2se写的一个简单的聊天系统,写了客户端和服务器。用到了socket,流读写技术,服务器端采用了多线程等技术。基本上涵盖了j2se中所有学到的技术,非常适合学习了j2se的初学者练习使用。
2.多线程并发编程,现在并发几乎是写服务端程序必须的技术,那对Java中的多线程就要有足够的熟悉,包括对象锁机制、synchronized关键字,concurrent包都要非常熟悉,这部分推荐你看看《Java并发编程实践》这本书,...
Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...
Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...