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(); } }
相关推荐
在IT领域,网络通信是不可或缺的一部分,而Java Socket编程则是实现网络通信的一种常见方式,尤其在TCP/IP协议栈上。本教程将详细讲解如何利用Java Socket实现基于TCP/IP的服务端和客户端之间的报文发送与接收。 ...
1. **Socket编程**:Java的java.net.Socket和ServerSocket类用于建立客户端和服务器之间的连接,实现数据的双向传输。 2. **多线程**:服务器通常需要同时处理多个客户端的请求,因此会用到多线程技术,每个客户端...
同时,深入研究QQ_Server和QQ_Client中的源代码,可以让你更直观地了解如何在Java中实现C/S架构的聊天系统,以及如何应用NIO、Socket和多线程技术。通过这样的实践,你不仅能提升Java编程技能,还能增强对网络编程和...
实现一个服务器对多个客户端的关键是,在服务端的使用集合CPtrList类用保存客户端的socket对象,思想与Java中的编程思想一样,只不过Java中会使用多线程技术,在Vector集合保存客户端的socket对象,而MFC框架提供了...
总的来说,这个Java_C-S聊天程序涉及了Socket编程、多线程技术、以及点对点和点对多的通信模式,是学习网络编程和并发处理的一个典型实例。通过研究和实践这个项目,开发者可以深入理解这些概念,并提升在实际应用中...
在IT领域,多线程是实现高性能服务器的关键技术之一。多线程允许一个应用程序同时执行多个不同的任务,从而提高效率,特别是在处理并发连接时。在这个场景下,"多线程实现服务端"指的是通过创建和管理多个线程来构建...
多线程在Java Socket服务端的应用是关键,因为如果所有客户端都在同一个线程中处理,那么服务端将无法同时处理多个并发请求。通过创建一个新的线程来处理每个客户端连接,服务端可以有效地并行处理多个客户端的请求...
【标题】"java多线程+Socket+Swing做的局域网聊天程序"涉及的核心知识点主要涵盖Java编程、多线程、网络通信以及图形用户界面设计。以下将详细阐述这些关键概念及其在实现局域网聊天程序中的应用。 **1. Java编程**...
在IT领域,网络编程是不可或缺的一部分,而Socket编程则是实现网络通信的基础。本文将深入探讨如何利用Socket进行连续发送与连续接收数据,基于标题“利用socket连续发送与连续接收数据”以及描述中提到的实现过程。...
本文介绍了一个基于Java的多线程Socket编程示例,通过对服务端实现的分析,我们可以了解到如何利用Java的多线程技术和Socket通信来构建高性能的网络应用程序。这种编程方式特别适合处理大量的并发连接,是构建实时...
Java多线程Socket聊天程序是基于Java编程语言实现的一个网络通信应用,主要涉及了Java的Socket编程和多线程技术。这两个核心概念在Java中占据了非常重要的地位,特别是在开发网络应用和服务端系统时。 首先,Java ...
总的来说,基于C/S模式的Java聊天室项目涵盖了网络编程、多线程、GUI设计、数据结构、安全性以及服务端优化等多个Java编程的重要知识点,是学习和提升Java技能的绝佳实践项目。开发者在实现这样一个系统时,不仅能...
这个学习资源可以帮助我们深入了解Java中的TCP Socket编程和多线程技术。 首先,让我们来看看TCP协议。TCP是一种面向连接的、可靠的传输协议,它保证了数据包在传输过程中的顺序和完整性。通过三次握手建立连接,四...
总的来说,这个Java的Socket实现的多人聊天程序是一个很好的学习示例,涵盖了网络编程、多线程、并发控制以及用户界面设计等多个方面的知识。通过分析和研究这个项目,开发者可以深入理解Java的Socket通信机制,为...
在Java编程中,Socket通信是网络应用程序之间进行数据交换的基础,尤其在文件传输...总的来说,使用Java的Socket和多线程技术实现文件夹传输是一项复杂的任务,需要掌握网络编程、多线程、文件操作等多个方面的知识。
在本项目中,我们主要探讨的是使用Java语言和Socket编程技术来实现一个仿QQ的聊天程序,涵盖了服务端和客户端的开发。这个程序允许多个用户同时在线进行交流,类似于一个简单的聊天室。以下是对相关知识点的详细说明...
在Java中,Socket编程是实现网络通信的基本手段,它允许应用程序之间通过网络进行数据交换。本文将详细探讨Java Socket网络编程中的关键知识点。 首先,我们回顾一下网络通信的发展历史。通信技术的发展经历了从...
图形界面编程,利用socket和UDP/TCP编写,客户端和服务端程序可以进行多次对话。实现了一对一多次对话,里面运用了网络编程和多线程编程。
- 这些流对象是`InputStream`和`OutputStream`的子类,可以读取或写入字节数据,实现数据的双向传输。 4. **数据传输**: - 数据传输通常是基于字节流的,可以使用`DataInputStream`和`DataOutputStream`对基本...