1. UDP多线程聊天如何实现
如果对楼主有帮助,给个采纳好不,谢谢啦
UDP-聊天-多线程实现
/*UDP-聊天-多线程实现
编写一个聊天程序。
有收数据的部分,和发数据的部分。
这两部分需要同时执行。
那就需要用到多线程技术。
一个线程控制收,一个线程控制发.
因为收和发动作是不一致的,所以要定义两个run方法
而且这两个方法要封装到不同的类中。
*/import java.io.*;
import java.net.*;class Send implements Runnable//实现Runnable接口,可以多线,发送
{
private DatagramSocket ds;//定义Socket为成员
public Send (DatagramSocket ds)//发送的构造方法,以指定的DatagramSocket服务作为参数
{ this.ds = ds;
} public void run()
{ try
{
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//读取键盘
String line = null; while ((line = bufr.readLine())!=null)
{ if ("886".equals(line))//设定输入886为退出
break; byte[] buf = line.getBytes();//得到数组
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002); //DatagramPacket的 实例化new参数(byte[],length)
//DatagramPacket的 实例化new参数(byte[],length,address,port)
//192.168.1.255 末尾255是广播,0是网段
ds.send(dp);
}
} catch (Exception e)
{ throw new RuntimeException("发送端失败");
}
}
}class Rece implements Runnable//实现Runnable接口,可以多线程,接收
{
private DatagramSocket ds;//定义Socket为成员
public Rece(DatagramSocket ds)//构造方法,以指定的DatagramSocket服务作为参数
{ this.ds = ds;
} public void run()
{ try
{ while (true)
{ byte[] buf = new byte[1024];//数组作为缓冲区
DatagramPacket dp = new DatagramPacket(buf,buf.length); //DatagramPacket的 实例化new参数(byte[],length)
//DatagramPacket的 实例化new参数(byte[],length,address,port)
ds.receive(dp);//将接收到的数据存储到定义好的数据包中。调用DatagramSocket的方法receive()
String ip = dp.getAddress().getHostAddress();//ip地址从DatagramPacket数据包中分离出来
String data = new String(dp.getData(),0,dp.getLength());//getData()变数组,参数(byte[],offset,length)
System.out.println(ip+":"+data);
}
} catch (Exception e)
{ throw new RuntimeException("接收端失败");
}
}
}class ChatDemo{
public static void main(String[] args) throws Exception
{
DatagramSocket sendSocket = new DatagramSocket();//无参数,随机分配端口 发送端的UDP服务
DatagramSocket receSocket = new DatagramSocket(10002);//参数,port指定端口 接收端的UDP服务
//建立多线程对象,要把实现Runnable接口的子类作为参数,传给Thread的构造函数
new Thread(new Send(sendSocket)).start(); new Thread(new Rece(receSocket)).start();
//这里new了Thread()的目的就是为了调用start()方法来启动线程
//启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。
//<!-- 为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例: -->
//事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run()
}
}
2. 我要一份用java网络编程写的点对点的两人聊天程序(TCP和UDP)
Server端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
Client端:
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine(); //从系统标准输入读入一字符串
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //从系统标准输入读入一字符串
}
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
}catch(Exception e) {
System.out.println("Error"+e); //出错,则打印出错信息
}
}
}
3. java能开发视频聊天吗
肯定的说:能!
大致的说一下原理:
首先你要学习一下java的网络编程方面的东西,像TCP/IP UDP协议等等的东西,因为要编写视频聊天程序,这些理论性的东西是必须的。
现在假设你已经可以编写出简单功能的网络聊天功能的软件了,想在就是要用你编写软件驱动起你的摄像头了。首先你要确保你的摄像头的开发商已经给了你该摄像头的驱动接口,有了这个接口你就可以编写出可以驱动起该摄像头的java程序了。
之后你要学习一下JNI,也就是Java Native Interface,学会这个,你就可以用你编写的java程序来调用摄像头驱动程序(驱动一般都是用C或C++)编写,有了JNI,你就可以让你的java程序和驱动的C或C++程序来进行通讯了。
之后把摄像头的实时摄像信息传到网络的另一边(用到网络编程),就可以让对方看到你了(前提是对方也安装了你编写的软件,否则你们之间的通讯可能没人能看懂)。
这是个大致的过程,实现的过程肯定会晕倒这样那样的问题,不过不要担心,学习的过程就是遇到问题,思考问题,解决问题的过程。这样慢慢的你就发现你已经很牛了!
4. java开发聊天功能用什么技术
Java开发聊天功能可以使用Socket和ServerSocket技术来实现。
在这种情况下,服务器端需要创建一个ServerSocket对象来监听客户端的连接请求槐伍。当有新的连接请求到达时,服务器会创建一个铅敏或新的Socket对象来与客户端进行通信,并将该Socket对象加入到线程池中。通过这种方式,服务器可拿御以同时处理多个客户端的连接请求和消息交互。
客户端需要创建一个Socket对象,并指定服务器端的IP地址和端口号来连接服务器。连接成功后,客户端可以向服务器发送消息,也可以接收来自服务器的消息。当客户端退出聊天室时,需要关闭Socket连接,并通知服务器该客户端已经离开。
在实际开发中,还需要考虑到消息的编码和解码、异常处理、线程安全等问题。可以使用现成的开源框架如Netty、Spring Boot等来简化聊天功能的开发。同时,还需要进行充分的测试和优化,以提高聊天功能的性能和用户体验。
5. java开发聊天功能用什么技术比较好
开发聊天功能可以采用以下几种技术:
Socket编程:使用Java Socket编程可以实现基于TCP或UDP的网络通信,这亏毕是Java最基础、最底层的网络编程技术。使用Socket编程可以实现实时通信、消息推送等功能,但需要自己实现消息协议、数据传输等细节。
Java NIO:Java NIO(New IO)是Java 1.4之后引入的一种新IO API,它提供了基于事件驱动的异步IO操作,可以大大提高网络通信效率。使用Java NIO可以实现高并发、高性能的网络通信,但需要掌握NIO的相关概念和使用方式。
WebSockets:WebSockets是HTML5标准中新增的一种协议,可以实现基于浏览器的实时双向通信。使用Java开发WebSockets可以实现跨平台、跨浏览器的聊天功能,但需要掌握WebSocket协议的相关概念和使用方式。
第三方库:Java中有许多第三方库可以用于实现聊天功能,如Netty、Apache MINA、Smack等。这些库提供了更加简销悉芹单、易用的API,可以快速陆升搭建聊天功能,但需要熟悉相关库的使用方法和特性。
具体选用哪种技术,需要根据具体需求、开发经验和技术水平等因素进行综合考虑。