这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信。

注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息边界问题、端口号是否被占用、消息命令的解析问题等。。

下面是两个程序的代码,(两个程序均为控制台程序)

先发服务端的(Server)完整代码如下:

引入命名空间:

1
2
3
using System.Net.Sockets; 
using System.Net; 
using System.Threading; 

  完整代码如下:

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
namespace SocketServer 
    class Program 
    
        private static byte[] result = new byte[1024]; 
        private static int myProt = 8885;   //端口 
        static Socket serverSocket; 
        static void Main(string[] args) 
        
            //服务器IP地址 
            IPAddress ip = IPAddress.Parse("127.0.0.1"); 
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
            serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口 
            serverSocket.Listen(10);    //设定最多10个排队连接请求 
            Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString()); 
            //通过Clientsoket发送数据 
            Thread myThread = new Thread(ListenClientConnect); 
            myThread.Start(); 
            Console.ReadLine(); 
        
   
        /// <summary> 
        /// 监听客户端连接 
        /// </summary> 
        private static void ListenClientConnect() 
        
            while (true
            
                Socket clientSocket = serverSocket.Accept(); 
                clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello")); 
                Thread receiveThread = new Thread(ReceiveMessage); 
                receiveThread.Start(clientSocket); 
            
        
   
        /// <summary> 
        /// 接收消息 
        /// </summary> 
        /// <param name="clientSocket"></param> 
        private static void ReceiveMessage(object clientSocket) 
        
            Socket myClientSocket = (Socket)clientSocket; 
            while (true
            
                try 
                
                    //通过clientSocket接收数据 
                    int receiveNumber = myClientSocket.Receive(result); 
                    Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber)); 
                
                catch(Exception ex) 
                
                    Console.WriteLine(ex.Message); 
                    myClientSocket.Shutdown(SocketShutdown.Both); 
                    myClientSocket.Close(); 
                    break
                
            
        
    

  

以上是服务端(server)的完整代码。

客户端(Client)的完整代码如下:

引入命名空间:

1
2
3
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 

  完整代码:

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
namespace SocketClient 
    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, 8885)); //配置服务器IP与端口 
                Console.WriteLine("连接服务器成功"); 
            
            catch 
            
                Console.WriteLine("连接服务器失败,请按回车键退出!"); 
                return
            
            //通过clientSocket接收数据 
            int receiveLength = clientSocket.Receive(result); 
            Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(result,0,receiveLength)); 
            //通过 clientSocket 发送数据 
            for (int i = 0; i < 10; i++) 
            
                try 
                
                    Thread.Sleep(1000);    //等待1秒钟 
                    string sendMessage = "client send Message Hellp" + DateTime.Now; 
                    clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage)); 
                    Console.WriteLine("向服务器发送消息:{0}" + sendMessage); 
                
                catch 
                
                    clientSocket.Shutdown(SocketShutdown.Both); 
                    clientSocket.Close(); 
                    break
                
            
            Console.WriteLine("发送完毕,按回车键退出"); 
            Console.ReadLine(); 
        
    

  编译成功后,先运行 服务端(server),再运行客户端(client)即可达到通信效果。

效果如下图:

该程序已在局域网测试通过。(192.168.X.X)

C# 之 Socket 简单入门示例的更多相关文章

  1. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  2. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  3. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  4. .NET Socket 简单入门

    说到Socket,想必大家都或多或少有所涉及,从最初的计算机网络课程,讲述了tcp协议,而Socket就是对协议的进一步封装,使我们开发人员能够更加容易轻松的进行软件之间的通信. 这个星期刚好接受一个 ...

  5. spring简单入门示例

    1 控制反转IOC\依赖注入DI,因为翻译的不同,因此有两个名字.       控制反转意思就是说,当我们调用一个方法或者类时,不再有我们主动去创建这个类的对象,控制权交给别人(spring). 依赖 ...

  6. socket.io入门示例参考

    参考示例地址:http://www.linchaoqun.com/html/cms/content.jsp?menu=nodejs&id=1480081169735

  7. JavaGUI之Swing简单入门示例

    简介 AWT(译:抽象窗口工具包),是Java的平台独立的窗口系统,图形和用户界面器件工具包. Swing 是为了解决 AWT 存在的问题而以 AWT 为基础新开发的包(在使用Swing时也常会用到j ...

  8. 【java开发系列】—— struts2简单入门示例

    前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了js ...

  9. 百度 WebUploader 简单入门示例

    首先一定要引入:jquery.js 然后是webuploader的一个 css和还一个js 三个必须引用. <!DOCTYPE html> <html xmlns="htt ...

随机推荐

  1. vue 手机端样式统一配置

  2. redis深入了解

    来自:https://www.cnblogs.com/lixinjie/p/a-key-point-of-redis-in-interview.html 是数据结构而非类型 很多文章都会说,redis ...

  3. java PDF分页打印

    将获取的pdf文件按页拆分:参考https://q.cnblogs.com/q/99944/ pdf文件有多页,第一页需设置横向打印,其他页设置为纵向打印. PDDocument document = ...

  4. CF987B - High School: Become Human

    Year 2118. Androids are in mass production for decades now, and they do all the work for humans. But ...

  5. AAC编码学习

    AAC音频编码 https://www.jianshu.com/p/af0165f923e9 https://blog.csdn.net/u013427969/article/details/5309 ...

  6. 逛公园 [NOIP2017 D1T3] [记忆化搜索]

    Description 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的 ...

  7. Base64简单原理

    Base64要求把每三个8bit的字节转换为四个6bit的字节(即3*8 = 4*6 = 24) 1.例如我们有一个中文字符“中国(gb2312)”,转为十进制为:中-->54992,国--&g ...

  8. LeetCode 33 Search in Rotated Sorted Array [binary search] <c++>

    LeetCode 33 Search in Rotated Sorted Array [binary search] <c++> 给出排序好的一维无重复元素的数组,随机取一个位置断开,把前 ...

  9. vue + websocket 的使用

    阳光正好,我们正在努力前行. 一.引言 初始使用websocket ,一开始看文档的时候,觉得很简单,只需要创建websocket实例,然后有几个监听打开连接,监听关闭连接,监听连接异常等方法.但是, ...

  10. LoadRunner(一)——性能测试基础及性能指标概述

    参考学习感谢:<精通软件性能测试与LoadRunner实战> 一.典型的性能测试场景 某个产品要发布了,需要对全市的用户做集中培训.通常在进行培训的时候,老师讲解完成一个业务以后,被培训用 ...