首页 > 编程语言 >用java制作

用java制作

时间:2023-11-19 09:15:39浏览次数:35  
标签:java IOException import catch new 制作 public

server

package chat;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
public class Server {
boolean started = false;
ServerSocket ss = null;
List<ChatClient> clients = new ArrayList<ChatClient>(); //保存客户端线程类
public static void main(String[] args) {
new Server().start();
}
void start() {
try {
ss = new ServerSocket(8888); //建立服务端对象
started = true;
} catch (BindException e) {
System.out.println("端口使用中");
} catch (IOException e) {
e.printStackTrace();
}
try {
while (started) {
Socket s = ss.accept(); //接收客户端
ChatClient c = new ChatClient(s);
System.out.println("客戶端接收成功");
new Thread(c).start(); //启动线程
clients.add(c); //添加线程类
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
class ChatClient implements Runnable { //建立客户端线程接收,发送数据
private Socket s;
DataInputStream dis = null;
DataOutputStream dos = null;
boolean bConnected = false;
public ChatClient(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
bConnected = true;
} catch (IOException e) {
e.printStackTrace();
}
}
void send(String str) {
try {
dos.writeUTF(str);
} catch (SocketException e) {
System.out.println("對方退出了");
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
try {
while (bConnected) {
String str = dis.readUTF();
// System.out.println(str);
for (int i = 0; i < clients.size(); i++) {
ChatClient c = clients.get(i);
c.send(str);
}
}
} catch (EOFException e) {
System.out.println("客戶端退出了");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dis != null)
if (s != null)
try {
dis.close();
s.close();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

client

package chat;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
public class ChatClient extends Frame { //繼承Frame类
TextField tf = new TextField(); //输入框对象
TextArea ta = new TextArea(); //显示框对象
Socket s = null;
DataOutputStream dos = null;
DataInputStream dis = null;
boolean bConnected = false;
recvThread r = new recvThread(); //线程类
public static void main(String[] args) {
new ChatClient().creatFrame();
}
public void creatFrame() { //产生图形界面
this.setBounds(300, 300, 300, 300);
ta.setEditable(false);
this.add(tf, BorderLayout.SOUTH);
this.add(ta, BorderLayout.NORTH);
this.addWindowListener(new WindowAdapter() { //响应关闭窗口事件
public void windowClosing(WindowEvent e) {
disconnect();
System.exit(0);
}
});
tf.addActionListener(new tfListener()); //响应输入事件
this.pack();
this.setVisible(true);
connect();
new Thread(r).start();
}
public void connect() {
try {
s = new Socket("127.0.0.1", 8888); //建立客户端对象
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
bConnected = true;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect() { //窗口关闭时关闭客户端,输入,输出
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {

e.printStackTrace();
}
}
class tfListener implements ActionListener { //输入框实现的接口,响应输入事件
public void actionPerformed(ActionEvent e) {
String str = tf.getText();
//ta.setText(str);
tf.setText("");
try {
dos.writeUTF(str);
dos.flush();
//dos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
class recvThread implements Runnable { //客户端线程接收数据
public void run() {
try {
while (bConnected) {
String str;
str = dis.readUTF(); //拿到数据
ta.setText(ta.getText() + str + '\n');//显示到显示框中
}
} catch (SocketException e) {
System.out.println("退出了");
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}

标签:java,IOException,import,catch,new,制作,public
From: https://www.cnblogs.com/zpd0214/p/17841575.html

相关文章

  • 请查收这份 6.3k star的 Java 攻城狮学习指南!
    大家好,我是Java陈序员。自从一入Java开发的坑,可谓是每天过得神清气爽(水深火热)。每天不是被项目经理赶进度,就是被测试小姐姐追着改Bug!都没有时间好好学习(摸鱼)了!今天给大家介绍一份Java学习指南,无论是新手还是老鸟,皆可食用!新手可以用来学习找工作,老鸟可以用来跳槽面试复习......
  • java集合
    java集合2023.11.5集合可以动态的保存任意多个对象提供一系列的操作对象方法使用集合添加,删除新元素,简洁集合的框架体系图Iterator对象称为迭代器,主要用于遍历Collection集合中的元素所有实现了Collection接口的的集合类都有一个iterator()方法,用以返回......
  • Java开发者的Python快速进修指南:控制之if-else和循环技巧
    简单介绍在我们今天的学习中,让我们简要了解一下Python的控制流程。考虑到我们作为有着丰富Java开发经验的程序员,我们将跳过一些基础概念,如变量和数据类型。如果遇到不熟悉的内容,可以随时查阅文档。但在编写程序或逻辑时,if-else判断和循环操作无疑是我们经常使用的基本结构。毕竟,......
  • Java秋招学习路线
    Java秋招学习路线前期:JVM+JUC+Redis+Mysql+项目(实际的项目或者网上找的项目)+力扣面试笔刷100题后期:边投简历边看八股MySql:MySql45讲链接:https://pan.baidu.com/s/1IEViw6E9SWmtgpot8Cdeug提取码:hsqf--来自百度网盘超级会员V6的分享Redis:黑马点评,可以当做简历里的一个项......
  • 数据结构之二叉树的遍历2(java)
    一:概述二叉树的深度遍历3种方式:前序遍历、中序遍历、后序遍历。下面是具体的这三种方式的遍历代码。二:具体概述用递归的方式实现前序遍历、中序遍历、后序遍历。publicclassTreeNodeTraveral{/***构建二叉树**@paraminputList输入序列*/......
  • 25届实习秋招-Java面试-MySQL数据库面试题整理-牛客网近一年
    MySQL概述:关系型数据和非关系型数据库的区别,有哪些应用场景有哪些非关系的单表操作:三种SQL语言类型,MySql本身常用命令DDL-数据定义语句:表的常用操作truncate/delete--drop操作的区别varchar最大字节数DMLUpdate语句的sql执行流程对行数据的修改是......
  • IDEA创建第一个JAVA项目,带你认识Java工程中的项目结构
    不管学习那门编程语言,掌握当下流行的集成开发环境是必不可少的。当然仍有多年前的大佬,因为那会的“艰苦条件”,仍有保留着使用文本编辑器编写代码的习惯。对于JAVA来说两大集成开发环境非常受大家青睐!IDEA和eclipse。今天这里将以IDEA为例,带大家认识一个Java工程中应该有哪些......
  • [Javascript] Using Generator to create a number generate with condition
    constgenerateTimeMs=(min,max)=>Math.floor(Math.random()*(max-min+1))+min/***Ageneratorwhichcangeneratenumbersbasedonsettings**@param{number}min-mintimervalue,unitms*@param{number}max-maxtimervalue,unit......
  • class lombok.javac.apt.LombokProcessor (in unnamed module @0x4587f0f9)
    classlombok.javac.apt.LombokProcessor(inunnamedmodule@0x4587f0f9)cannotaccessclasscom.sun.tools.javac.processing.JavacProcessingEnvironment(inmodulejdk.compiler)becausemodulejdk.compilerdoesnotexportcom.sun.tools.javac.processingtounn......
  • 【Java基础】while循环的标号
    需求:学生管理系统的菜单有5个操作选项:1.添加学生、2.删除学生、3.修改学生、4.查看学生、5.退出;进入系统后操作选项会循环给出,但当输入5触发退出时循环结束。实现:给循环添加标号,在break后添加循环标号指示需要结束的循环学生管理系统的菜单初始化代码publicclassStuMan......