本文转载自:http://blog.csdn.net/andrew_wx/article/details/6629721

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

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

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

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

引入命名空间:

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

完整代码如下:

  1. namespace SocketServer
  2. {
  3. class Program
  4. {
  5. private static byte[] result = new byte[1024];
  6. private static int myProt = 8885;   //端口
  7. static Socket serverSocket;
  8. static void Main(string[] args)
  9. {
  10. //服务器IP地址
  11. IPAddress ip = IPAddress.Parse("127.0.0.1");
  12. serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  13. serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口
  14. serverSocket.Listen(10);    //设定最多10个排队连接请求
  15. Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
  16. //通过Clientsoket发送数据
  17. Thread myThread = new Thread(ListenClientConnect);
  18. myThread.Start();
  19. Console.ReadLine();
  20. }
  21. /// <summary>
  22. /// 监听客户端连接
  23. /// </summary>
  24. private static void ListenClientConnect()
  25. {
  26. while (true)
  27. {
  28. Socket clientSocket = serverSocket.Accept();
  29. clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));
  30. Thread receiveThread = new Thread(ReceiveMessage);
  31. receiveThread.Start(clientSocket);
  32. }
  33. }
  34. /// <summary>
  35. /// 接收消息
  36. /// </summary>
  37. /// <param name="clientSocket"></param>
  38. private static void ReceiveMessage(object clientSocket)
  39. {
  40. Socket myClientSocket = (Socket)clientSocket;
  41. while (true)
  42. {
  43. try
  44. {
  45. //通过clientSocket接收数据
  46. int receiveNumber = myClientSocket.Receive(result);
  47. Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));
  48. }
  49. catch(Exception ex)
  50. {
  51. Console.WriteLine(ex.Message);
  52. myClientSocket.Shutdown(SocketShutdown.Both);
  53. myClientSocket.Close();
  54. break;
  55. }
  56. }
  57. }
  58. }
  59. }

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

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

引入命名空间:

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

完整代码:

  1. namespace SocketClient
  2. {
  3. class Program
  4. {
  5. private static byte[] result = new byte[1024];
  6. static void Main(string[] args)
  7. {
  8. //设定服务器IP地址
  9. IPAddress ip = IPAddress.Parse("127.0.0.1");
  10. Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  11. try
  12. {
  13. clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口
  14. Console.WriteLine("连接服务器成功");
  15. }
  16. catch
  17. {
  18. Console.WriteLine("连接服务器失败,请按回车键退出!");
  19. return;
  20. }
  21. //通过clientSocket接收数据
  22. int receiveLength = clientSocket.Receive(result);
  23. Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(result,0,receiveLength));
  24. //通过 clientSocket 发送数据
  25. for (int i = 0; i < 10; i++)
  26. {
  27. try
  28. {
  29. Thread.Sleep(1000);    //等待1秒钟
  30. string sendMessage = "client send Message Hellp" + DateTime.Now;
  31. clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
  32. Console.WriteLine("向服务器发送消息:{0}" + sendMessage);
  33. }
  34. catch
  35. {
  36. clientSocket.Shutdown(SocketShutdown.Both);
  37. clientSocket.Close();
  38. break;
  39. }
  40. }
  41. Console.WriteLine("发送完毕,按回车键退出");
  42. Console.ReadLine();
  43. }
  44. }
  45. }

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

效果如下图:

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

若编译失败,可到下面的地址下载项目文件:

http://download.csdn.net/source/3465765

(转)C# Socket简单例子(服务器与客户端通信)的更多相关文章

  1. python socket之tcp服务器与客户端demo

    python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...

  2. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  3. js json简介(json的本质也是字符串)(用于服务器和客户端通信)

    js json简介(json的本质也是字符串)(用于服务器和客户端通信) 一.总结 1.json的语法和js的语法非常像,只是json的键和值都是双引号,因为json的本质也是字符串 2.json是一 ...

  4. 一个 Java 的 Socket 服务器和客户端通信的例子

    一个 HelloWord 级别的 Java Socket 通信的例子.通讯过程: 先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求.然后运行 Client 端,客户端发出连接请 ...

  5. “TCP:三次握手”分析——以一个简单的“服务器”和“客户端”为例

    linux&C这两天学到了网络编程这一章,自己写了一个小的"服务器"和"客户端"程序,目的在于简单理解tcp/ip模型,以及要搭建一台简单服务器,服务器 ...

  6. socket,模拟服务器、客户端通信

    服务器代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;u ...

  7. socket,实现服务器和客户端对话

    服务器: #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string>#include<WinSock ...

  8. C# Socket简单例子(服务器与客户端通信)

    这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...

  9. Netty——简单创建服务器、客户端通讯

    Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程 ...

随机推荐

  1. 求中位数,O(n)的java实现【利用快速排序折半查找中位数】

    查找无序数组的中位数,要想时间复杂度为O(n)其实用计数排序就能很方便地实现,在此讨论使用快速排序进行定位的方法. 1.中位数定义 2.算法思想 3.Java代码实现 4.时间复杂度分析 5.附录 中 ...

  2. 源码安装LNMP与搭建Zabbix

    系统环境:CentOS release 6.5 (Final) 搭建Zabbix 3.0对PHP环境要求>= 5.4 一.下载NMP的软件包: N:wget http://nginx.org/d ...

  3. Minhash 算法 及其应用

    背景: 我遇到一个问题,要计算140万商品的杰卡德相似度.如果直接要直接两两计算的话,这计算量根本算不了,而且也没必要. 分析: 在这些商品中很多商品的相似度并不高,也就是说其中达到相似度阈值的商品只 ...

  4. Vector3函数理解-计算两向量之间的角度

    1.已知两个向量dirA,dirB.Vector3 dirA = new Vector3(-1,1,0); Vector3 dirB = new Vector3(-1,1,1);2.使向量处于同一个平 ...

  5. idea结合git使用三

    1.将本地代码提交到码云上面的步骤 2.先提交到本地Git的仓库,通过commit files 3.然后vcs----->git---->push,将本地仓库代码,推送到码云公司项目mas ...

  6. Nginx优化思路

    对于高性能网站 ,请求量大,如何支撑? 1方面,要减少请求 对于开发人员----合并css, 背景图片, 减少mysql查询等. 2: 对于运维 nginx的expires ,利用浏览器缓存等,减少查 ...

  7. Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

    Cassandra之中一共包含下面5种Key: Primary Key Partition Key Composite Key Compound Key Clustering Key 首先,Prima ...

  8. 【spark】IDEA建立基于scala语言的spark项目

    1.新建一个Spark项目 2.选择maven,用模板创建项目 如果 没有这个模板,我们需要添加一个 我们这里使用的是1.6版本Archetype Group Id : net.alchim31.ma ...

  9. 【MAVEN】笔记

    引言 Maven是Java项目开发中的重要组成部分,了解它学习它是我们的必修课. Maven是什么? Maven是一个项目管理和综合工具.Maven是标准化的产物,使用标准的目录结构和默认构建生命周期 ...

  10. LeetCode OJ:Maximum Subarray(子数组最大值)

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...