电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java網(wǎng)絡(luò)編程實現(xiàn)多線程聊天

瀏覽:99日期:2022-08-09 11:53:41

本文實例為大家分享了Java網(wǎng)絡(luò)編程實現(xiàn)多線程聊天的具體代碼,供大家參考,具體內(nèi)容如下

聊天程序如果是單線程,會導(dǎo)致沒人只能說一句,并且說了以后,必須等到另一個人的回復(fù),才能說第二句。收發(fā)都在主線程中,不能同時進(jìn)行。

解決方法:

將收發(fā)放到兩個不同的線程

1. SendThread 發(fā)送消息線程2. RecieveThread 接受消息線程3. Server一旦接受到連接,就啟動收發(fā)兩個線程4. Client 一旦建立了連接,就啟動收發(fā)兩個線程

多線程聊天

1 SendThread

package socket;import java.io.DataOutputStream;import java.io.IOException;import java.io.OutputStream;import java.net.Socket;import java.util.Scanner;public class SendThread extends Thread { private Socket s; public SendThread(Socket s) {this.s = s; } @Override public void run() {try { OutputStream os = s.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); while(true){Scanner sc = new Scanner(System.in);String str = sc.next();dos.writeUTF(str); }} catch (IOException e) { e.printStackTrace();} }}

2 RecieveThread

package socket;import java.io.DataInputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;public class RecieveThread extends Thread { private Socket s; public RecieveThread(Socket s) {this.s = s; } @Override public void run() {InputStream is = null;try { is = s.getInputStream(); DataInputStream dis = new DataInputStream(is); while(true){String msg = dis.readUTF();System.out.println(msg); }} catch (IOException e) { e.printStackTrace();} }}

3 Server

package socket;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) {try { ServerSocket ss = new ServerSocket(8888); System.out.println('監(jiān)聽端口號:8888'); Socket s = ss.accept(); new SendThread(s).start(); new RecieveThread(s).start();} catch (IOException e) { e.printStackTrace();} }}

4 Client

package socket;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class Client { public static void main(String[] args) {try { Socket s = new Socket('127.0.0.1', 8888); new SendThread(s).start(); new RecieveThread(s).start();} catch (UnknownHostException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();} }}簡單對話框

Server

package socket;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextArea;import javax.swing.JTextField;public class GUIServer { public static void main(String[] args) throws Exception {JFrame f = new JFrame();f.setTitle('server');f.setSize(400, 300);f.setLocation(100, 200);f.setLayout(null);JButton b = new JButton('send');b.setBounds(10, 10, 80, 30);f.add(b);final JTextField tf = new JTextField();tf.setBounds(10, 110, 80, 30);f.add(tf);final JTextArea ta = new JTextArea();ta.setBounds(110,10, 200, 300);f.add(ta);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);ServerSocket ss = new ServerSocket(8888);System.out.println('listenning on port:8888');final Socket s = ss.accept();new Thread() { public void run() {while (true) { try {DataInputStream dis = new DataInputStream(s.getInputStream());String text = dis.readUTF();ta.append(text+'rn'); } catch (Exception e) {e.printStackTrace(); }} }}.start();b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {String text = tf.getText();ta.append(text+'rn');try { DataOutputStream dos = new DataOutputStream( s.getOutputStream()); dos.writeUTF(text);} catch (Exception ex) { ex.printStackTrace();} }}); }}

Client

package socket;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextArea;import javax.swing.JTextField;public class GUIClient { public static void main(String[] args) throws Exception {JFrame f = new JFrame();f.setTitle('client');f.setSize(400, 300);f.setLocation(600, 200);f.setLayout(null);JButton b = new JButton('send');b.setBounds(10, 10, 80, 30);f.add(b);final JTextField tf = new JTextField();tf.setBounds(10, 110, 80, 30);f.add(tf);final JTextArea ta = new JTextArea();ta.setBounds(110,10, 200, 300);f.add(ta);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);final Socket s = new Socket('127.0.0.1', 8888);new Thread() { public void run() {while (true) { try {DataInputStream dis = new DataInputStream(s.getInputStream());String text = dis.readUTF();ta.append(text+'rn'); } catch (Exception e) {e.printStackTrace(); }} }}.start();b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {String text = tf.getText();ta.append(text+'rn');try { DataOutputStream dos = new DataOutputStream( s.getOutputStream()); dos.writeUTF(text);} catch (Exception ex) { ex.printStackTrace();} }}); }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 碳纤维布-植筋胶-灌缝胶-固特嘉加固材料公司 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 苹果售后维修点查询,苹果iPhone授权售后维修服务中心 – 修果网 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 空气弹簧|橡胶气囊|橡胶空气弹簧-上海松夏减震器有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 移动机器人产业联盟官网| 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ | 防爆电机-高压防爆电机-ybx4电动机厂家-河南省南洋防爆电机有限公司 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 青岛成人高考_山东成考报名网 | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | AR开发公司_AR增强现实_AR工业_AR巡检|上海集英科技 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 环氧树脂地坪_防静电地坪漆_环氧地坪漆涂料厂家-地壹涂料地坪漆 环球电气之家-中国专业电气电子产品行业服务网站! | 广州展览设计公司_展台设计搭建_展位设计装修公司-众派展览装饰 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | STRO|DTRO-STRO反渗透膜(科普)_碟滤 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 电抗器-能曼电气-电抗器专业制造商 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 节流截止放空阀-不锈钢阀门-气动|电动截止阀-鸿华阀门有限公司 |