Socket 聊天程序 发送端
2010年12月24日
//发送端
package socket1;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
/*
* 聊天程序
* 利用多线程 Runnable 复写 run方法
* 制定端口 9999 端口进行通信
* 发送端 方案
* 1.首先DatagramSocket 创建发送端
* 2.需要描述所说的内容 一般都是键盘录入的内容 所以 是(读取键盘录入) 字符--->字节
* BufferedReader bufr=BufferedReader(new OuputStreamReader(System.in));
* 3.进行信息打包 将所录入的文件信息 打包成数据 DatagramPacket (数据包)
* 对于发送数据包 有几大指明 参数 1字节数组2字节数组长度 3对方主机IP地址 ,对方IP端口好
* 4.发送
*
* 注意 在过程中的异常情况 信息打印在 C:\\Exception_log.txt 目录里边!
* ok!
*/
public class FS implements Runnable {
//接收制定的 发送端
private DatagramSocket ds;
FS(DatagramSocket ds)
{
this.ds=ds;
}
//复写run方法
BufferedReader bufr=null;
DatagramPacket dp;
public void run()
{
//发送端口已经确立
try
{
//键盘录入数据
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//现在又数据了,从缓冲区读取数据
String line;
while((line=bufr.readLine())!=null)
{
//将数据打包
if(line.equals("再见"))
break;
dp=new DatagramPacket(line.getBytes(),line.getBytes().length,InetAddress.getByName("192.168.0.255"),9999);
ds.send(dp);
}
}
catch(Exception e)
{
//备份文件 需要时间的处理
/*
* 一看到跑出异常文件 就是用 printStream 因为他接收一个OutputStram 类型参数
* 1.建立时间
* 注意 SimpleDateFormat 是java.Text包中的 new Date() java.Util包中
* 2.建立个文件
*
*/
//建立时间
String datestr=new SimpleDateFormat("yyyy年MM月dd日-kk:mm:ss").format(new Date());
PrintStream ps;
try {
ps=new PrintStream(new FileOutputStream("c:\\Exception_log.txt"));
//写一些东西
ps.write((datestr+"-------------").getBytes());
//将内存堆栈中的信息 打印到 文件里
e.printStackTrace(ps);
//修饰文本末尾
ps.write("-------------------------------------------------".getBytes());
ps.close();
}catch(Exception ex)
{
throw new RuntimeException("文件写入失败!");
}
}
finally
{
//安全退出
try {
if(bufr!=null)
{
bufr.close();
}
}
catch (Exception e2)
{
throw new RuntimeException("写入流关闭异常");
}
}
}
}
2010年12月24日
//发送端
package socket1;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
/*
* 聊天程序
* 利用多线程 Runnable 复写 run方法
* 制定端口 9999 端口进行通信
* 发送端 方案
* 1.首先DatagramSocket 创建发送端
* 2.需要描述所说的内容 一般都是键盘录入的内容 所以 是(读取键盘录入) 字符--->字节
* BufferedReader bufr=BufferedReader(new OuputStreamReader(System.in));
* 3.进行信息打包 将所录入的文件信息 打包成数据 DatagramPacket (数据包)
* 对于发送数据包 有几大指明 参数 1字节数组2字节数组长度 3对方主机IP地址 ,对方IP端口好
* 4.发送
*
* 注意 在过程中的异常情况 信息打印在 C:\\Exception_log.txt 目录里边!
* ok!
*/
public class FS implements Runnable {
//接收制定的 发送端
private DatagramSocket ds;
FS(DatagramSocket ds)
{
this.ds=ds;
}
//复写run方法
BufferedReader bufr=null;
DatagramPacket dp;
public void run()
{
//发送端口已经确立
try
{
//键盘录入数据
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//现在又数据了,从缓冲区读取数据
String line;
while((line=bufr.readLine())!=null)
{
//将数据打包
if(line.equals("再见"))
break;
dp=new DatagramPacket(line.getBytes(),line.getBytes().length,InetAddress.getByName("192.168.0.255"),9999);
ds.send(dp);
}
}
catch(Exception e)
{
//备份文件 需要时间的处理
/*
* 一看到跑出异常文件 就是用 printStream 因为他接收一个OutputStram 类型参数
* 1.建立时间
* 注意 SimpleDateFormat 是java.Text包中的 new Date() java.Util包中
* 2.建立个文件
*
*/
//建立时间
String datestr=new SimpleDateFormat("yyyy年MM月dd日-kk:mm:ss").format(new Date());
PrintStream ps;
try {
ps=new PrintStream(new FileOutputStream("c:\\Exception_log.txt"));
//写一些东西
ps.write((datestr+"-------------").getBytes());
//将内存堆栈中的信息 打印到 文件里
e.printStackTrace(ps);
//修饰文本末尾
ps.write("-------------------------------------------------".getBytes());
ps.close();
}catch(Exception ex)
{
throw new RuntimeException("文件写入失败!");
}
}
finally
{
//安全退出
try {
if(bufr!=null)
{
bufr.close();
}
}
catch (Exception e2)
{
throw new RuntimeException("写入流关闭异常");
}
}
}
}