------- android培训、java培训、期待与您交流! ----------
聊天程序代码原理:
聊天程序是网络编程代码的核心部分,包括了全部的知识和概念。掌握了聊天程序就掌握了网路便成功。
package com.test.exam;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 需求:建立聊天程序
* @author 冯国强
*
*/
public class Question1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//创建一个发送端
DatagramSocket ds1=new DatagramSocket();
//创建一个接收端
DatagramSocket ds2=new DatagramSocket(10000);
//创建一个接收端线程并启动
new Thread(new send(ds1)).start();
//创建一个接收端线程并启动
new Thread(new receive(ds2)).start();
}
}
class send implements Runnable{
private DatagramSocket ds;
public send(DatagramSocket ds){
this.ds=ds;
}
public void run() {
BufferedReader br=null;
try{
//创建一个键盘录入流
br=new BufferedReader(new InputStreamReader(System.in));
//读取键盘录入数据并发送
String line=null;
while((line=br.readLine())!=null){
//用读取数据创建发送数据包
byte[] buf=line.getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
//发送端发送数据
ds.send(dp);
}
}catch (Exception e) {
throw new RuntimeException("发送端失败");
}finally{//释放资源
if(br!=null)
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class receive implements Runnable{
private DatagramSocket ds;
public receive(DatagramSocket ds){
this.ds=ds;
}
public void run() {
try{
while(true){
//定义一个缓冲数组
byte[] buf=new byte[1024];
//用缓冲数组创建一个接收数据包
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//接受数据,并显示
ds.receive(dp);//receive是一个阻塞式方法
String ip=dp.getAddress().getHostAddress();
String content=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+content);
}
}catch (Exception e) {
throw new RuntimeException("接收端失败");
}
}
}