C#在一台客户端进行了某个操作以后如何让其他不同的客户端如何实现相同的操作(一)
来源:互联网 发布:战舰世界峰风数据 编辑:程序博客网 时间:2024/06/05 10:52
首先要实现不同的客户端之间的通信问题,我选择了使用socket进行通信,因此首先要编写socket服务代码。为了实现socket向多个客户端发送信息,同时不会向信息的发出方发送信息,因此需要一个List来记录连接socket的客户端的信息,在收到客户端发送的消息的时候,通过遍历这个list的同时发送消息,从而实现向不同的客户端发送消息,在发送的时候将自身去掉,socket部分代码:
class Program
{static Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
static List<Socket> SocketList = new List<Socket>();
static void Main(string[] args)
{
try
{
int port = 2000;
string host = "192.168.10.57";
///创建终结点(EndPoint)
IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例
///创建socket并开始监听
s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
s.Listen(10);//开始监听
Console.WriteLine("等待客户端连接");
///接受到client连接,为此连接建立新的socket,并接受信息
while (true)
{
Socket temp = s.Accept();//为新建连接创建新的socket
Console.WriteLine("建立连接");
if (SocketList.Contains(temp))
continue;
SocketList.Add(temp);
Thread threadRecevice = new Thread(new ParameterizedThreadStart(ReceviceSendMessage));
threadRecevice.Start(temp);
}
//temp.Close();
//s.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
}
public static void ReceviceSendMessage(object socket)
{
if (!(socket is Socket))
return;
Socket temp = socket as Socket;
try
{
while (true)
{
string recvStr = "";
byte[] recvBytes = new byte[2048];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
///给client端返回信息
foreach (var item in SocketList)
{
if (item == temp)
continue;
Console.WriteLine(item.RemoteEndPoint.ToString() + ":" + recvStr);//把客户端传来的信息显示出来
item.Send(recvBytes, recvBytes.Length, 0);//返回信息给客户端
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
SocketList.Remove(temp);
}
finally
{
Console.ReadLine();
}
}
}
0 0
- C#在一台客户端进行了某个操作以后如何让其他不同的客户端如何实现相同的操作(一)
- C#在一台客户端进行了某个操作以后如何让其他不同的客户端如何实现相同的操作(二)
- C#在一台客户端进行了某个操作以后如何让其他不同的客户端如何实现相同的操作(三)
- 如何编写一条SQL实现根据某个字段的条件对某个字段进行不同的update操作
- 如何在一台主机上监控其他几台主机的某一端口?--hadoop
- 如何实现单点登录(一台计算机,只能运行一个客户端)
- 如何使用客户端对ZooKeeper进行操作。
- C#客户端的异步操作
- C#客户端的异步操作
- C#客户端的异步操作
- C#客户端的异步操作
- 如何在一台linux机器上同时运行多个openvpn客户端
- 如何在一台Android设备上模拟不同的屏幕大小和分辨率
- VC操作Excel——Excel的某个操作在vc里如何实现
- 如何进行定义特性(Attribute),并且在程序中如何检索定义的特性,可以根据用户定义的不同特性进行不同的操作。
- 如何让在客户端改变的状态保持连续性
- 如何让Flash的swf文件在客户端不缓存
- [转]MemCached的PHP客户端操作类一
- Redis快速入门:初识Redis
- firefox浏览器接口调试工具
- ROS XmlrpcNode 接口测试
- Making a Standard Request
- js 点击图片,将图片地址复制到粘贴板
- C#在一台客户端进行了某个操作以后如何让其他不同的客户端如何实现相同的操作(一)
- 课时41|封装-构造方法,this关键字
- MFC Listctrl 表格宽度自适应(根据表格内容长度)
- openCV2.4.13+VS2015+Cmake开发环境配置,解决nonfree问题
- 我的见解之hibernate(十)
- ionic 中使用 slidebox 利用angular ng-repeat 渲染后不显示问题
- 外部U盘插入Android系统后获取外部U盘的路径
- Java中native关键字
- js 控制复制粘贴