Sockets编程--网络传输对象(聊天室)
来源:互联网 发布:ipadmini2优化教程 编辑:程序博客网 时间:2024/04/29 14:28
///说明:下列代码分别复制进入三个控制台程序中执行
///第一步:新建一个类库用于序列化后传递
[System.Serializable]
public class filetest
{
private string name;
private int age;
private string message;
public string Message
{
get { return message; }
set { message = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
}
///第二步:服务器端代码
class program
{
static void Main()
{
new program().gettarget();
}
System.Collections.Generic.Dictionary<string, System.Net.Sockets.TcpClient> dr = new System.Collections.Generic.Dictionary<string, System.Net.Sockets.TcpClient>();
//得到连接对象后,新建线程并来执行新的连接(读和写)
private void gettarget()
{
System.Net.Sockets.TcpListener tl = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Parse("127.0.0.1"), 2009);
tl.Start();
while (true)
{
System.Net.Sockets.TcpClient tc = tl.AcceptTcpClient();
System.DateTime dt=System.DateTime.Now;
string s = dt.ToString("yyMMddhhmmss")+dt.Millisecond.ToString();
dr.Add(s, tc);
System.Threading.Thread th = new System.Threading.Thread(GetMessage);
th.Name = s;
th.IsBackground = true;
th.Start(tc);
System.Threading.Thread.Sleep(1);
}
}
private void GetMessage(object o)
{
System.Net.Sockets.TcpClient tc = (System.Net.Sockets.TcpClient)o;
System.Net.Sockets.NetworkStream ns = tc.GetStream();
System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
try
{
while (true)
{
filetest ft = (filetest)formatter.Deserialize(ns);
System.Console.WriteLine(ft.Message);
foreach (System.Collections.Generic.KeyValuePair<string, System.Net.Sockets.TcpClient> scg in dr)
{
System.Net.Sockets.TcpClient tt = scg.Value;
System.Net.Sockets.NetworkStream nns = tt.GetStream();
formatter.Serialize(nns, ft);
}
}
}
catch (System.Exception e)
{
dr.Remove(System.Threading.Thread.CurrentThread.Name);
System.Threading.Thread.CurrentThread.Abort();
}
}
}
///第三步:客户端代码
class program
{
static void Main()
{
System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient();
tc.Connect(System.Net.IPAddress.Parse("127.0.0.1"), 2009);
System.Net.Sockets.NetworkStream ns = tc.GetStream();
System.Threading.Thread th = new System.Threading.Thread(SendMessage);
th.IsBackground = true;
th.Start(ns);
System.Threading.Thread th2 = new System.Threading.Thread(GetMessage);
th.IsBackground = true;
th2.Start(ns);
}
private static void SendMessage(object o)
{
System.Net.Sockets.NetworkStream ns = (System.Net.Sockets.NetworkStream)o;
System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
try
{
while (true)
{
string s = System.Console.ReadLine();
filetest ft = new filetest();
ft.Message = s;
formatter.Serialize(ns, ft);
}
}
catch (System.Exception e)
{
System.Console.WriteLine("出现错误:{0}",e.Message);
}
}
private static void GetMessage(object o)
{
System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.Net.Sockets.NetworkStream nw = (System.Net.Sockets.NetworkStream)o;
try
{
while (true)
{
filetest ft = (filetest)formatter.Deserialize(nw);
System.Console.WriteLine(ft.Message);
}
}
catch (System.Exception e)
{
System.Console.WriteLine("出现错误:{0}",e.Message);
System.Console.ReadLine();
System.Environment.Exit(0);
}
}
}
- Sockets编程--网络传输对象(聊天室)
- Sockets编程--网络传输对象(聊天室)
- Sockets编程--网络传输对象(聊天室)
- Sockets编程--网络传输对象(采用异步机制)
- Windows Sockets 网络编程
- 6.6 网络编程的对象传输
- java网络编程(三)传输对象
- Windows Sockets 网络编程(三)
- Internet Sockets 网络编程指南
- Windows Sockets 网络编程(三)
- Windows sockets 网络编程(一)
- 网络编程 简易聊天室
- Windows Sockets 网络编程 WINDOWS SOCKETS 1.1 程序设计
- 网络编程TCP协议-聊天室
- 多线程+网络编程实现聊天室
- 网络编程项目(聊天室项目)
- IOCP框架之Windows Sockets网络编程
- Windows sockets 网络编程(1) — 综述
- “奇迹”
- java高级工程师
- 一开始学习会有些困难!
- 创建和销毁子进程
- C#获取当前日期时间【转】
- Sockets编程--网络传输对象(聊天室)
- 设计模式--抽象工厂
- vmware-tools安装说明
- C++与C语言的区别(1)
- web图标
- C++/C中命令行参数的原理
- 又一分页
- between与in的语法
- js日期控件