C#仿飞秋简单聊天工具
来源:互联网 发布:腾讯 群 大数据 教育 编辑:程序博客网 时间:2024/06/05 05:44
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
namespace Fq
{
public partial class Form2 : Form
{
string pro = "{0}&{1}&{2}&{3}&{4}";//我的软件的协传输议
//{0}用户名
//{1}IP
//{2}时间
//{3}命令
//{4}消息内容
//命令:1 发送文字,2 上线通知,3 在我之前上线的通知 4.下线通知 5.发文件名
//系统的一些变量***********
string userName = "奥特曼坑爹";//我的用户名
IPAddress ip;//我的ip
int port = 2000;//我的端口号
//************************
public Form2()
{
InitializeComponent();
Form.CheckForIllegalCrossThreadCalls = false;
}
//发送消息的方法
/// <summary>
/// 发送消息的方法(IP,命令,消息)
/// </summary>
/// <param name="sendIp"></param>
/// <param name="cmdNo"></param>
/// <param name="msg"></param>
public void UdpSendMessage(IPAddress sendIp, string cmdNo, string msg)
{
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//发送的内容
string context = string.Format(pro,userName,ip, DateTime.Now.Ticks, cmdNo, msg);
byte[] buffer = Encoding.Default.GetBytes(context);
//指定发给谁
client.Connect(sendIp, port);
//发送
client.Send(buffer);
//关闭
client.Close();
}
/// <summary>
/// 接收消息的方法
/// </summary>
public void UdpRecviceMessage()
{
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPAddress recIp = IPAddress.Any;
EndPoint ep=new IPEndPoint(ip,port);
server.Bind(ep);
byte[] buffer=new byte[65535];
while (true)
{
int len= server.Receive(buffer);
//将内容变为字符串
string msg = Encoding.Default.GetString(buffer,0,len);
//解析这个字符串 奥特曼坑爹:192.168.39.24:2013.01.16:1:msg
string[] arr= msg.Split('&');
string fName = arr[0];
string fIp = arr[1];
DateTime fDt = new DateTime(Convert.ToInt64(arr[2]));
string cmd = arr[3];
string context = arr[4];
//不同的命令做不同的操作*********
if (cmd=="2")
{
//上线
//listview中添加用户
ListViewItem lvi = new ListViewItem();
lvi.Text = fIp;
lvi.SubItems.Add(fName);
listView2.Items.Add(lvi);
if (fIp!=ip.ToString())
{
UdpSendMessage(IPAddress.Parse(fIp), "3", "我也上线了");
}
}
if (cmd == "3")
{
//上线
//listview中添加用户
ListViewItem lvi = new ListViewItem();
lvi.Text = fIp;
lvi.SubItems.Add(fName);
listView2.Items.Add(lvi);
}
if (cmd=="4")
{
//下线,移除此用户
for (int i = 0; i <listView2.Items.Count; i++)
{
if (listView2.Items[i].Text==fIp)
{
listView2.Items[i].Remove();
break;
}
}
}
if (cmd=="1")
{
string text = "{0}在{1}说:\r\n{2}\r\n";
text = string.Format(text, fName, fDt, context);
richTextBox2.AppendText(text);
richTextBox2.ScrollToCaret();
}
if (cmd=="5")
{
string[] arr2 = context.Split('|');
ListViewItem lvi = new ListViewItem();
lvi.Tag = arr2[0];
lvi.Text = Path.GetFileName(arr2[0]);
lvi.SubItems.Add(arr2[1]);
lvi.SubItems.Add(fIp);
listView1.Items.Add(lvi);
richTextBox2.AppendText(fName + "给您发送一个文件,右击接收\r\n");
richTextBox2.ScrollToCaret();
}
//*****************************
}
}
private void Form2_Load(object sender, EventArgs e)
{
#region //*************初始化用信息
string hostName = Dns.GetHostName();
IPAddress[] ips = Dns.GetHostAddresses(hostName);
foreach (IPAddress item in ips)
{
if (!item.IsIPv6LinkLocal)
{
ip = item;
}
}
#endregion
//启动接收
Thread th = new Thread(new ThreadStart(UdpRecviceMessage));
th.IsBackground = true;
th.Start();
//上线后发送
UdpSendMessage(IPAddress.Parse("255.255.255.255"),"2","上线");
}
private void Form2_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
//关闭窗口时向所有人发送一个退出的操作
UdpSendMessage(IPAddress.Broadcast, "4", "下线");
}
private void button1_Click(object sender, EventArgs e)
{
//给选中的人发消息
string msg = richTextBox1.Text;
foreach (ListViewItem item in listView2.SelectedItems)
{
string sIp = item.Text;
UdpSendMessage(IPAddress.Parse(sIp), "1", msg);
}
}
private void button2_Click(object sender, EventArgs e)
{
//打开一个文件对象框
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog()==DialogResult.OK)
{
string fileName = ofd.FileName;
//给你发一个消息
//文件大小
FileInfo fi = new FileInfo(fileName);
long size= fi.Length;
foreach (ListViewItem item in listView2.SelectedItems)
{
string sIp = item.Text;
UdpSendMessage(IPAddress.Parse(sIp), "5", fileName+"|"+size);
}
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
namespace Fq
{
public partial class Form2 : Form
{
string pro = "{0}&{1}&{2}&{3}&{4}";//我的软件的协传输议
//{0}用户名
//{1}IP
//{2}时间
//{3}命令
//{4}消息内容
//命令:1 发送文字,2 上线通知,3 在我之前上线的通知 4.下线通知 5.发文件名
//系统的一些变量***********
string userName = "奥特曼坑爹";//我的用户名
IPAddress ip;//我的ip
int port = 2000;//我的端口号
//************************
public Form2()
{
InitializeComponent();
Form.CheckForIllegalCrossThreadCalls = false;
}
//发送消息的方法
/// <summary>
/// 发送消息的方法(IP,命令,消息)
/// </summary>
/// <param name="sendIp"></param>
/// <param name="cmdNo"></param>
/// <param name="msg"></param>
public void UdpSendMessage(IPAddress sendIp, string cmdNo, string msg)
{
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//发送的内容
string context = string.Format(pro,userName,ip, DateTime.Now.Ticks, cmdNo, msg);
byte[] buffer = Encoding.Default.GetBytes(context);
//指定发给谁
client.Connect(sendIp, port);
//发送
client.Send(buffer);
//关闭
client.Close();
}
/// <summary>
/// 接收消息的方法
/// </summary>
public void UdpRecviceMessage()
{
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPAddress recIp = IPAddress.Any;
EndPoint ep=new IPEndPoint(ip,port);
server.Bind(ep);
byte[] buffer=new byte[65535];
while (true)
{
int len= server.Receive(buffer);
//将内容变为字符串
string msg = Encoding.Default.GetString(buffer,0,len);
//解析这个字符串 奥特曼坑爹:192.168.39.24:2013.01.16:1:msg
string[] arr= msg.Split('&');
string fName = arr[0];
string fIp = arr[1];
DateTime fDt = new DateTime(Convert.ToInt64(arr[2]));
string cmd = arr[3];
string context = arr[4];
//不同的命令做不同的操作*********
if (cmd=="2")
{
//上线
//listview中添加用户
ListViewItem lvi = new ListViewItem();
lvi.Text = fIp;
lvi.SubItems.Add(fName);
listView2.Items.Add(lvi);
if (fIp!=ip.ToString())
{
UdpSendMessage(IPAddress.Parse(fIp), "3", "我也上线了");
}
}
if (cmd == "3")
{
//上线
//listview中添加用户
ListViewItem lvi = new ListViewItem();
lvi.Text = fIp;
lvi.SubItems.Add(fName);
listView2.Items.Add(lvi);
}
if (cmd=="4")
{
//下线,移除此用户
for (int i = 0; i <listView2.Items.Count; i++)
{
if (listView2.Items[i].Text==fIp)
{
listView2.Items[i].Remove();
break;
}
}
}
if (cmd=="1")
{
string text = "{0}在{1}说:\r\n{2}\r\n";
text = string.Format(text, fName, fDt, context);
richTextBox2.AppendText(text);
richTextBox2.ScrollToCaret();
}
if (cmd=="5")
{
string[] arr2 = context.Split('|');
ListViewItem lvi = new ListViewItem();
lvi.Tag = arr2[0];
lvi.Text = Path.GetFileName(arr2[0]);
lvi.SubItems.Add(arr2[1]);
lvi.SubItems.Add(fIp);
listView1.Items.Add(lvi);
richTextBox2.AppendText(fName + "给您发送一个文件,右击接收\r\n");
richTextBox2.ScrollToCaret();
}
//*****************************
}
}
private void Form2_Load(object sender, EventArgs e)
{
#region //*************初始化用信息
string hostName = Dns.GetHostName();
IPAddress[] ips = Dns.GetHostAddresses(hostName);
foreach (IPAddress item in ips)
{
if (!item.IsIPv6LinkLocal)
{
ip = item;
}
}
#endregion
//启动接收
Thread th = new Thread(new ThreadStart(UdpRecviceMessage));
th.IsBackground = true;
th.Start();
//上线后发送
UdpSendMessage(IPAddress.Parse("255.255.255.255"),"2","上线");
}
private void Form2_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
//关闭窗口时向所有人发送一个退出的操作
UdpSendMessage(IPAddress.Broadcast, "4", "下线");
}
private void button1_Click(object sender, EventArgs e)
{
//给选中的人发消息
string msg = richTextBox1.Text;
foreach (ListViewItem item in listView2.SelectedItems)
{
string sIp = item.Text;
UdpSendMessage(IPAddress.Parse(sIp), "1", msg);
}
}
private void button2_Click(object sender, EventArgs e)
{
//打开一个文件对象框
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog()==DialogResult.OK)
{
string fileName = ofd.FileName;
//给你发一个消息
//文件大小
FileInfo fi = new FileInfo(fileName);
long size= fi.Length;
foreach (ListViewItem item in listView2.SelectedItems)
{
string sIp = item.Text;
UdpSendMessage(IPAddress.Parse(sIp), "5", fileName+"|"+size);
}
}
}
}
}
- C#仿飞秋简单聊天工具
- socket聊天工具简单实现
- python简单聊天工具开发
- Java之简单的聊天工具
- Socket应用,简单聊天工具实现
- 聊天工具
- 聊天工具
- C#基于socket的聊天工具与其源码
- C#基于socket的聊天工具与其源码
- 如何制作简单的仿qq聊天工具
- 使用非阻塞通信的简单聊天工具
- 使用socket的阻塞简单通信聊天工具
- 基于socket的android聊天工具简单实现
- vs2013 MFC Socket UDP 简单聊天工具
- iOS一个简单聊天工具的实现
- 创建一个简单的文本图片聊天工具
- c#做聊天工具为什么只能在局域网内发送数据
- UDP协议+C#写的一款局域网聊天工具+源代码
- 程序员笔试知识点整理
- 线程死锁与多线程访问
- linux嵌入式内核配置与裁剪浅析
- Android Studio工程中中文乱码
- 微观数据资料简介
- C#仿飞秋简单聊天工具
- tomcat+apache部署项目
- ns2中无线通信距离的一些小节
- 第十七周阅读程序
- 自己动手做Jquery easy UI Tree(涉及到拖拽、修改、增加、删除、异步加载等操作..)
- 第十七周上机程序阅读程序2
- 新人带团队五步骤(其中相互竞争是生有体会的好,团队文化也是)
- Task任务驳回到指定节点
- PL/SQL devoloper如何连接远程Oracle数据库