C# Socket实现简单控制台案例


本文摘自PHP中文网,作者巴扎黑,侵删。

这篇文章主要为大家分享了C# Socket简单的控制台案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、服务器端

1. 实例化并设置socket实例对象

a.创建ip地址和端口

b.绑定监听地址

c.设置一下允许同时访问数

2. 监听连接

a.通过启动一个新的线程执行,这样主线程不会假死(启动线程,所带的参数必须是object类型)

b.利用循环等待连接并返回一个负责通信的socket实例

c.返回的socket实例中可以获取到所连接客服的IP地址

3. 接收客服的发送过来的消息

a.在监听方法中启动一个新的线程执行

b.利用循环获取发送过来的消息,调用获取消息的方法需要传递一个字节变量参数,作为容器。方法返回值为int,表示获取到的有效字节数

c.如果有效字节数为0则跳出循环

d.接收到消息给客服的返回消息

4. 控制台程序服务器端代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

 

namespace ServerSocket

{

 class Program

 {

  static void Main(string[] args)

  {

   Console.WriteLine("Hello World!");

   Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);

   IPAddress ip = IPAddress.Any;

   IPEndPoint point = new IPEndPoint(ip, 2333);

   //socket绑定监听地址

   serverSocket.Bind(point);

   Console.WriteLine("Listen Success");

   //设置同时连接个数

   serverSocket.Listen(10);

 

   //利用线程后台执行监听,否则程序会假死

   Thread thread = new Thread(Listen);

   thread.IsBackground = true;

   thread.Start(serverSocket);

 

   Console.Read();

  }

 

  /// <summary>

  /// 监听连接

  /// </summary>

  /// <param name="o"></param>

  static void Listen(object o)

  {

   var serverSocket = o as Socket;

   while (true)

   {

    //等待连接并且创建一个负责通讯的socket

    var send = serverSocket.Accept();

    //获取链接的IP地址

    var sendIpoint = send.RemoteEndPoint.ToString();

    Console.WriteLine($"{sendIpoint}Connection");

    //开启一个新线程不停接收消息

    Thread thread = new Thread(Recive);

    thread.IsBackground = true;

    thread.Start(send);

   }

  }

 

  /// <summary>

  /// 接收消息

  /// </summary>

  /// <param name="o"></param>

  static void Recive(object o)

  {

   var send = o as Socket;

   while (true)

   {

    //获取发送过来的消息容器

    byte[] buffer = new byte[1024 * 1024 * 2];

    var effective = send.Receive(buffer);

    //有效字节为0则跳过

    if (effective == 0)

    {

     break;

    }

    var str = Encoding.UTF8.GetString(buffer,0, effective);

    Console.WriteLine(str);

           var buffers = Encoding.UTF8.GetBytes("Server Return Message");

           send.Send(buffers);

 

   }

  }

 }

}

二、客户端

1. 实例化并进行连接socket实例对象

a.创建ip地址和端口(服务器的IP和端口)

b.与服务器端建立链接

2. 接收服务器发送的消息

a.启动一个新的线程执行

b.利用循环获取发送过来的消息,调用获取消息的方法需要传递一个字节变量参数,作为容器。方法返回值为int,表示获取到的有效字节数

c.如果有效字节数为0则跳出循环

3. 给服务器发送消息

a. 调用socket对象的send()方法直接发送

4. 控制台程序客户端代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

 

namespace SocketClient

{

 class Program

 {

  static void Main(string[] args)

  {

   Console.WriteLine("Hello World!");

   //创建实例

   Socket socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp);

   IPAddress ip = IPAddress.Parse("192.168.0.111");

   IPEndPoint point = new IPEndPoint(ip, 2333);

   //进行连接

   socketClient.Connect(point);

    

   //不停的接收服务器端发送的消息

   Thread thread = new Thread(Recive);

   thread.IsBackground = true;

   thread.Start(socketClient);

 

   //不停的给服务器发送数据

   int i = 0;

   while (true)

   {

    i++;

    var buffter = Encoding.UTF8.GetBytes($"Test Send Message:{i}");

    var temp = socketClient.Send(buffter);

    Thread.Sleep(1000);

   }

    

  }

 

 

  /// <summary>

  /// 接收消息

  /// </summary>

  /// <param name="o"></param>

  static void Recive(object o)

  {

   var send = o as Socket;

   while (true)

   {

    //获取发送过来的消息

    byte[] buffer = new byte[1024 * 1024 * 2];

    var effective = send.Receive(buffer);

    if (effective == 0)

    {

     break;

    }

    var str = Encoding.UTF8.GetString(buffer, 0, effective);

    Console.WriteLine(str);

   }

  }

 }

}

以上就是C# Socket实现简单控制台案例的详细内容!

相关阅读 >>

C#基础入门-常量详解

使用C#操作windowad之添加对象到用户组

C#实现base64处理的加密解密,编码解码的示例代码

C# 应用npoi获取excel中的图片,保存至本地的算法的图文代码实例详解

C#中正则表达式有什么作用?匹配字符有什么含义?

带你了解C#中的构造函数

.net(C#)输入域名获取主域名小工具

C# 获取随机字符串实现方法

C#如何使用reflect获取dll文件中的类型并调用?

C#基础入门-简单了解注释

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...