C#做了个多线程网络通信的例子
来源:互联网 发布:js原生设置属性值 编辑:程序博客网 时间:2024/04/23 22:11
using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading;namespace server{ class Program { public static TcpListener myList; public static Socket s; static void Main(string[] args) { try { // 把IP地址转换为IPAddress的实例 先得主机名再得IP IPAddress ipAd = IPAddress.Parse(Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString()); // 初始化监听器, 端口为8001 myList = new TcpListener(ipAd, 8001); // 开始监听服务器端口 myList.Start(); // 输出服务器启动信息 Console.WriteLine("在8001端口启动服务..."); Console.WriteLine("本地节点为:" + myList.LocalEndpoint); Console.WriteLine("等待连接....."); while (true) { // 等待处理接入连接请求 // 新建立的连接用套接字s表示 s = myList.AcceptSocket(); //AcceptSocket 是一个阻塞方法,它返回可用来发送和接收数据的 Socket。如果希望避免阻塞,您可以使用 Pending 方法来确定传入连接队列中是否有连接请求。 //这里用一个新的类来接收s,在类里起一个thread处理 AcceptSocketClass accept = new AcceptSocketClass(s); accept.StartThread(); } // 善后工作,释放资源 //s.Close(); //myList.Stop(); } catch (Exception e) { Console.WriteLine("Error..... " + e.StackTrace); } Console.ReadLine(); } } public class AcceptSocketClass { public static int times = 0; // 注意这里必须是静态变量(也就是类变量)才能在不同实例中更新它。 Socket socket; public AcceptSocketClass(Socket s) { socket = s; } public void StartThread() { //这个类起一个线程处理你的事件 Console.WriteLine("\n连接来自 " + socket.RemoteEndPoint); // 接收客户端信息 byte[] b = new byte[100]; int k = socket.Receive(b); if (k > 0) { Console.WriteLine("收到第{0}批数据流...", times + 1); for (int i = 0; i < k; i++) { Console.Write(Convert.ToChar(b[i])); } Thread td = new Thread(new ParameterizedThreadStart(DoAction)); td.Start(times); times++; } } private void DoAction(object t) { Console.WriteLine("启动第{0}个线程", (int)t + 1); Thread.Sleep(10000); Console.WriteLine("第{0}个线程醒了", (int)t + 1); // 处理客户端请求,给客户端回应 ASCIIEncoding asen = new ASCIIEncoding(); socket.Send(asen.GetBytes("The" + ((int)t + 1).ToString() + "th string was Echoed by the server.")); Console.WriteLine("\n第{0}个线程已发送回应信息", (int)t + 1); Thread.CurrentThread.Abort();//干完就退 } }}
-----------------------------------------------------------------------------------------------------------------------------------
using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Net;using System.Net.Sockets;using System.Threading;namespace client{ class Program { public static int t = 1; public static string strHost = "192.168.1.1";//直接用本机IP省事 public static string str; static void Main(string[] args) { try { Thread[] myTd = new Thread[100]; for (int j = 0; j < 100; j++) { myTd[j] = new Thread(new ThreadStart(ConstantSend)); myTd[j].Start(); } } catch (Exception e) { Console.WriteLine("Error..... " + e.StackTrace); } Console.ReadLine(); } private static void ConstantSend()//收发在一个线程才能保证端口不错乱 { try { // 新建客户端套接字 TcpClient tcpclnt = new TcpClient(); Console.Write("连接----->"); // 连接服务器的8001端口,自己不一定用8001端口 tcpclnt.Connect(strHost, 8001); Console.WriteLine("第{0}个连接成功", t); t++; Console.WriteLine("发送一个'Hi'过去后睡2000ms\n"); // 得到客户端的流 Stream stm = tcpclnt.GetStream(); ASCIIEncoding asen = new ASCIIEncoding(); str = "Hi" + (t - 1).ToString(); byte[] ba = asen.GetBytes(str); //Console.WriteLine("传输中....."); stm.Write(ba, 0, ba.Length); Thread.Sleep(2000); // 接收从服务器返回的信息 byte[] bb = new byte[100]; int k = stm.Read(bb, 0, 100); // 输出服务器返回信息 for (int i = 0; i < k; i++) { Console.Write(Convert.ToChar(bb[i])); } Console.WriteLine();//空行区分下 // 关闭客户端连接 tcpclnt.Close(); } catch (Exception e) { Console.WriteLine("Error..... " + e.StackTrace); } } }}
- C#做了个多线程网络通信的例子
- 动手做了第一个JNI的小例子
- 下午做了个“自动补全”的小例子
- 网络通信程序做个瞬间的扫描判断
- 多线程的网络通信
- 多线程通信的小例子
- C#做了个相棋盘的图片
- 最近用htmlunit做网络爬虫 遇到拿不到初始化js加载的数据的问题 最近解决了 写个简单的例子
- 用c#做了个播放器
- 做了个lazarus + kolce +sqlite的例子,共享一下开发经验。
- 实现了UI的简单群聊(java的IO流和多线程,网络通信)
- TCP网络通信的简单例子
- UDP网络通信的简单例子
- java—网络通信socket的例子
- [zz]c#串口通信的小例子
- C#简单的UDP通信例子
- C# 谁能以最简单的形式做个多线程的示例
- 如何做网络通信的项目?
- typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);
- mysql 触发器
- android-- dp px sp长度单位的区别
- wireshark 过滤
- asp.net页面间传值的五种方法
- C#做了个多线程网络通信的例子
- ACE 容器之二 ACE_DLList 的使用
- 十八年开发经验分享(二)问题解决篇(上)
- smtp rfc 中文文档
- Java Swing中Icon图标大小的设定,图片大小不可设置的解决办法
- j2EE 使用DAO模式对数据库操作(jsp程序)
- java 使用反射机制来获取私有方法和成员变量
- librdkafka 0.7 编译失败解决办法
- Android stagefright与opencore对比