---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
使用自己的学习的知识,做点自己喜欢的东西,感悟良多啊。很多事情不是子讲的那么简单的实现。原来,自己不懂的,有的时候一个顿悟就 豁然开朗的感觉的确妙不可言啊。哈哈
不多废话,分享一下我写的仿照的QQ,没有界面,基于Dos 命令行的,也可以用 Eclispe 都行的!
使用方法:先开启 服务端,等待即可。 之后开启 客户端,可以开启多个客户端!
代码如下:
客户端代码:
package stu.love.qq;
import java.net.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramSocket;
/**
* 单项的发送信息,将发送的信息 打印在控制台上。
* 当你在控制台输入 over 的时候,程序结束;
*
* */
/**
*
* 需求:
* 编写一个聊天程序!
* 1 接收数据 发送数据
* 这两个部分需要 同时执行!
* 就需要用到 多线程技术!
* 一个 线程 控制 发送数据,一个线程控制 接受数据!
*
* 因为 接收和发送 动作是不一致的!
* 所以 要定义两个 run()
* 而且这两个方法,要封装到 不同的类中!
*
*
* */
// 客户端
class Client1 implements Runnable
{
//成员变量
private DatagramSocket ds;
//成员函数
public Client1(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)
{
// 接收到到 886 应该是 服务端处理吧!
// 在此处直接退出不合适吧!
/* if("886".equals(line))
break;*/
// 获取输入的信息 得到 字节码
byte[] buf = line.getBytes();
// 将数据封装成 数据报 并指明 IP 和 端口!
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("localhost"),10012);
// 发送数据
ds.send(dp);
}
} catch (Exception e) {
throw new RuntimeException("发送端失败!");
// TODO: handle exception
}
}
}
public class Clienter {
public static void main(String[] args) throws SocketException {
DatagramSocket sendSocket = new DatagramSocket();
new Thread(new Client1(sendSocket)).start();
}
}
服务端代码:
package stu.love.qq;
import java.net.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramSocket;
/**
* 单项的发送信息,将发送的信息 打印在控制台上。
* 当你在控制台输入 over 的时候,程序结束;
*
* */
/**
*
* 需求:
* 编写一个聊天程序!
* 1 接收数据 发送数据
* 这两个部分需要 同时执行!
* 就需要用到 多线程技术!
* 一个 线程 控制 发送数据,一个线程控制 接受数据!
*
* 因为 接收和发送 动作是不一致的!
* 所以 要定义两个 run()
* 而且这两个方法,要封装到 不同的类中!
*
*
* */
/*
//接收端 服务端
*
* 服务 处理 客户端 发送的 数据请求!
*
*/
class Server1 implements Runnable
{
//成员变量
private DatagramSocket ds = null;
//构造函数
public Server1(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);
//先拿 IP 地址
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
// 在服务器断 处理一下 客户端的退处
if(data.contains("over"))
{
System.out.println(ip+"........"+ "退出登录!");
}
System.out.println(ip+"::"+data);
}
} catch (Exception e) {
throw new RuntimeException("接收端失败!");
// TODO: handle exception
}
}
}
public class Service {
public static void main(String[] args) throws SocketException {
DatagramSocket receSocket = new DatagramSocket(10012);
new Thread(new Server1(receSocket)).start();
}
}
下面是效果图:
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
详细请查看:www.itheima.com