这个例子只是简单实现了如何使用 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. 《JAVA程序设计》结对编程联系_四则运算(第一周:阶段总结)

    结对对象与其博客链接 20175312陶光远:https://www.cnblogs.com/20175312-tgy/p/10630566.html 需求分析 (一)功能需求 1.自动生成题目(本周 ...

  2. xpath解析html

    XPath XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XP ...

  3. java PDF分页打印

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

  4. 按键精灵PC版<末日王者>

    更新模式[强制] 更新版本[1.28] 更新链接[https://yunfei-1256035889.cos.ap-beijing.myqcloud.com/%E6%9C%AB%E6%97%A5%E4 ...

  5. 更新mysql驱动5.1-47 Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEY

    今天在更新mysql驱动后运行程序突然报如下错误: java.sql.SQLException: Generated keys not requested. You need to specify S ...

  6. Mac下brew安装JDK的教程

    ---恢复内容开始--- 安装命令: brew cask install java 默认应该会下载jdk7 也可以指定下载版本brew cask install java6 注意: brew inst ...

  7. mac中如何卸载pkg包

    ---恢复内容开始--- 参考地址.https://blog.csdn.net/play_fun_tech/article/details/27964861?utm_source=tuicool&am ...

  8. fiddler 抓取 htts 失败

    1.清除C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件(首次安装fiddler请忽略) 2.清除电脑上的根证书, ...

  9. 【C语言编程练习】5.10寻找水仙数

    1. 题目要求 如果一个3位数等于各位数字的立方和,则称这个数为水仙数,例如407=4^3+0^3+7^3.编写一个程序,找出全部的水仙数 2. 题目分析 感觉又和之前的题目大同小异了,先找出解空间, ...

  10. Python爬虫开发与项目实战

    Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...