毕向东udp学习笔记3多线程聊天
项目功能:
实现了多线程下的发送接收,比较好
希望可以加入GUI,类似聊天软件一样,有一个消息输入框,捕获输入消息,作为发送线程
有一个显示消息框,接收消息并显示,作为接收线程
不知道的是,当在线程中使用UI的gettext(),settext()时,是否子线程和UI线程冲突,赶紧学习下。
代码:
import java.net.*;
import java.io.*;
/*
编写一个聊天程序。
有收数据的部分,和发数据的部分。
这两部分需要同时执行。
那就需要用到多线程技术。
一个线程控制收,一个线程控制发。 因为收和发动作是不一致的,所以要定义两个run方法。
而且这两个方法要封装到不同的类中。 */
class Send implements Runnable
{
private DatagramSocket ds;
//构造方法
public Send(DatagramSocket ds){
this.ds=ds;
} public void run() { try{
//使用控制台输入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line =null; while((line=bufr.readLine())!=null){ byte[] buf =line.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.103"),10005); ds.send(dp);
//如果输入内容是"886",跳出循环
if("886".equals(line))
break;
} //4.关闭连接
ds.close(); }catch(Exception e){
throw new RuntimeException("发送端失败");
}
}
} class Recv implements Runnable
{
private DatagramSocket ds;
//构造方法
public Recv(DatagramSocket ds){
this.ds=ds;
} public void run() {
try{
while(true){
//2,创建数据包
byte[] buf =new byte[1024];
DatagramPacket dp =new DatagramPacket(buf,buf.length); //3,使用接收的方法将数据包存储到数据包中
ds.receive(dp);//阻塞式 //4.通过数据包对象的方法,解析其中的数据,比如端口,地址,内容等
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String content = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"::" +port+":"+content);
if(content.equals("886")){
System.out.println(ip+"有人退出..." );
break;
} }
//满足886跳出循环后,退出
ds.close();
}catch(Exception e){
throw new RuntimeException("接收端失败");
}
}
} public class ChatDemo
{
public static void main(String[] args) throws IOException{
DatagramSocket send =new DatagramSocket(); DatagramSocket recv =new DatagramSocket(10005); new Thread(new Send(send)).start();
new Thread(new Recv(recv)).start();
}
}
注意:Send、Recv类前面是不能加修饰符public的,否则会报错
毕向东udp学习笔记3多线程聊天的更多相关文章
- 毕向东udp学习笔记1
参看了毕向东老师的视频教程,准备直接用EditPlus记事本来直接敲Java代码,好好学习一下udp部分,GUI部分,线程部分,加油 项目功能: 实现udp简单的发送接收功能. 当使用EditPlus ...
- 毕向东udp学习笔记2
项目功能: 发送端读取控制台输入,然后udp发送 接收端一直接收,直到输入为886 相对于笔记1,修改了发送端代码,实现发送控制台的内容,接收端循环接收,当输入886时,停止发送 发送端: impo ...
- 毕向东tcp学习笔记1
项目功能: 实现一次发送和接收,服务器接收客户端发送的内容并打印出来 用最通俗的语言讲解下,上图中大椭圆是服务器,A.C是客户端,当客户端和服务器通过socket建立连接后 1.两者之间形成一个通道, ...
- 孙鑫VC学习笔记:多线程编程
孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified ...
- NDK学习笔记-JNI多线程
前面讲到记录到ffmpeg音视频解码的时候,采用的是在主线程中进行操作,这样是不行的,在学习了POSIX多线程操作以后,就可以实现其在子线程中解码了,也可以实现音视频同步了 简单示例 在native实 ...
- Python Web学习笔记之多线程编程
本次给大家介绍Python的多线程编程,标题如下: Python多线程简介 Python多线程之threading模块 Python多线程之Lock线程锁 Python多线程之Python的GIL锁 ...
- 学习笔记-java 多线程
背景说明: 多线程并发与管理,是java基础知识里的重点,本文根据<java核心技术第八版>中的多线程技术的学习,对知识点进行整理:这里只对基础知识点进行简单罗列,以达到对知识点有网状关联 ...
- Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)
多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...
- JUC学习笔记--Thread多线程基础
实现多线程的两种方法 java 实现多线程通过两种方式1.继承Thread类 ,2.实现Runnable接口 class Newthead extends Thread{ public void ru ...
随机推荐
- Quartz.NET总结(一)
Quartz.NET总结(一) 前段时间,花了大量的时间,将原先的计划任务,切换到Quartz.NET来进行管理.原先的后台定时服务都是通过计划任务来实现的,但是随着业务增长,计划任务也越来越多,每个 ...
- LPC1788的IIC使用
#ifndef __IIC0_H_ #define __IIC0_H_ #include "common.h" #include "delay.h" //IIC ...
- winscp 秘钥登录
如题 如果不想用密码登录,可以选择用秘钥文件登录winscp 原理和linux分发ssh公钥是一个道理 1:在被管理的机器上分发公钥 ,出现 authorized_keys才可以 完成服务端配置 2: ...
- 机器学习算法与实现 之 Logistic Regression---java实现
Logistic Regression和Linear Regression实现起来几乎是一样的,有疑问的同学可以看一看Andrew N.g在coursera上的machine learning课程. ...
- 《算法导论》习题2.3-5 二分搜索 Binary Search
地球人都知道“二分查找”,方法也非常简单,但是你能不能在10分钟内写出一个没有bug的程序呢? 知易行难,自己动手写一下试一试吧. public class BinarySearch { public ...
- UIButton样式设置
btn.frame = CGRectMake(x, y, width, height); [btn setTitle: @”search” forState: UIControlStateNormal ...
- 安装pip工具
Python 2.7.9+ and 3.4+ Good news! Python 3.4 (released March 2014) and Python 2.7.9 (released Decemb ...
- 初识Google code jam平台
为了熟悉一下code jam的平台,今天简单试了一下,做了一下Qualification Round Africa 2010的三道题目,都是很基础的. A题:给一个数n和一系列数a[],从a[]中找出 ...
- Linux搭建Tomcat
Linux系统运行确实很好,但是开发用,估计很少人用吧? 一.安装 1.下载tar.gz文件 2.解压,可以使用mv命令修改文件名 3.建立软连接: ln -s /usr/local/tomcat8. ...
- js原生继承之——原型式继承实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...