博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#socket客户端自己输入消息发送到服务端通信实现通信
阅读量:7014 次
发布时间:2019-06-28

本文共 4860 字,大约阅读时间需要 16 分钟。

一,服务端代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net.Sockets;using System.Net;namespace ServerDemo1{    class Program    {        static List
clientList = new List
(); ///
/// 广播消息 /// ///
public static void BroadcastMessage(string message) //找到相对应的客户端发送消息 { var notConnectedList = new List
(); foreach (var client in clientList) { if (client.Connected) client.SendMessage(message); //调用服务端发送消息方法 else { notConnectedList.Add(client); } } foreach (var temp in notConnectedList) { clientList.Remove(temp); } } static void Main(string[] args) { Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); tcpServer.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888)); tcpServer.Listen(100); Console.WriteLine("server running..."); while (true) { Socket clientSocket = tcpServer.Accept(); clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello")); Console.WriteLine("a client is connected !"); Client client = new Client(clientSocket); //把与每个客户端通信的逻辑(收发消息)放到client类里面进行处理 clientList.Add(client); } } }}

处理数据类

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Net.Sockets;namespace ServerDemo1{    ///     /// 用来跟客户端做通信     ///     class Client    {        private Socket clientSocket;        private Thread t;        private byte[] data = new byte[1024];//这个是一个数据容器        public Client(Socket s)        {            clientSocket = s;            //启动一个线程 处理客户端的数据接收            t = new Thread(ReceiveMessage);            t.Start();        }        private void ReceiveMessage()        {            //一直接收客户端的数据            while (true)            {                //在接收数据之前  判断一下socket连接是否断开                if (clientSocket.Poll(10, SelectMode.SelectRead))                {                    clientSocket.Close();                    break;//跳出循环 终止线程的执行                }                int length = clientSocket.Receive(data);                string message = Encoding.UTF8.GetString(data, 0, length);                //接收到数据的时候 要把这个数据 分发到客户端                //广播这个消息                Program.BroadcastMessage(message);                Console.WriteLine("收到了消息:" + message);            }        }        public void SendMessage(string message)        {            byte[] data = Encoding.UTF8.GetBytes(message);            clientSocket.Send(data);    //将客户端发送过来的消息返回给服务端        }        public bool Connected        {            get { return clientSocket.Connected; }        }    }}

客户端代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net.Sockets;using System.Net;using System.Threading;namespace ClientDemo{    class Program    {        private static byte[] result = new byte[1024];        static void Main(string[] args)        {            //设定服务器IP地址            IPAddress ip = IPAddress.Parse("127.0.0.1");            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            try            {                clientSocket.Connect(new IPEndPoint(ip, 8888)); //配置服务器IP与端口                Console.WriteLine("连接服务器成功");            }            catch            {                Console.WriteLine("连接服务器失败,请按回车键退出!");                return;            }            //通过clientSocket接收数据            int receiveLength = clientSocket.Receive(result);            Console.WriteLine("接收服务器消息:{0}", Encoding.ASCII.GetString(result, 0, receiveLength));            //通过 clientSocket 发送数据            string str = "";            while (str != "exit")            {                try                {                    Thread.Sleep(1000); //等待1秒钟                    Console.WriteLine("向服务器发送消息:");                    str = Console.ReadLine();                    clientSocket.Send(Encoding.ASCII.GetBytes(str + "  " + DateTime.Now+"1"));                    int receiveL = clientSocket.Receive(result);                    Console.WriteLine("接收服务器消息:{0}", Encoding.ASCII.GetString(result, 0, receiveL));                }                catch                {                    clientSocket.Shutdown(SocketShutdown.Both);                    clientSocket.Close();                    break;                }            }            Console.ReadKey();        }    }}

 

转载于:https://www.cnblogs.com/May-day/p/6369760.html

你可能感兴趣的文章
emacs使用http代理打开
查看>>
IOException: Sharing violation on path *****
查看>>
redhat python笔试题
查看>>
Silverlig“.NET研究”ht 2.5D RPG游戏技巧与特效处理:(三)动态光影
查看>>
字符串
查看>>
Vue 项目中使用less
查看>>
2018-2019-1 20165303 《信息安全系统设计基础》第七周学习总结
查看>>
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
查看>>
如何將CMOS影像以RGB16的方式存入SDRAM? (SOC) (DE2-70) (TRDB-D5M) (TRDB-LTM)
查看>>
中国程序员容易发音错误的单词
查看>>
Android通知的基本用法
查看>>
window平台如何搭建Mysql集群
查看>>
退出unity运行
查看>>
linux -- ubuntu dash bash
查看>>
day35-1 类的三大特性---继承,以及类的派生
查看>>
以前常用的攻击软件源代码
查看>>
MVC3 上传文件
查看>>
一个很easy的脚本--php获取服务器端的相关信息
查看>>
leetcode 【 Set Matrix Zeroes 】python 实现
查看>>
cocos2d的常用动作及效果总结之一: Basic actions
查看>>