本文转载自: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. js实现继承的方式

    [原文] 前言 JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一.那么如何在JS中实现继承呢?让我们拭目以待. JS继承的实现方式 既然要实现继承,那么首先我们得有一个父类,代码如下: // ...

  2. 怎样发布一个工程到自己的GitHub

    本人小白一枚: 第一次通过命令行的形式将自己的工程发布到自己的GitHub上去,还是请教了大神之后才完成的.通过总结经验,小白也掌握了一些关于往代码托管平台上发布工程的方式,其实只要用心学,里面的东西 ...

  3. ArcEngine 坐标系转换

    /// <summary> /// 地理坐标系 转 投影坐标系 /// </summary> /// <param name="x"></ ...

  4. 没有服务器,关于angular路由访问静态页面chrome报错的问题

    这个找不到html,报错因为没有xhr,但是在火狐下没有问题的. 比如说ajax,直接写路径的话,我们的chrome也是不支持的,火狐可以的.

  5. MVC3;0问题与知识点

        1.    代码中@Html.BeginForm不对,应 @using(Html.BeginForm){}   2.   不设置 注解 required属性中的 errormessage,则错 ...

  6. 5.6 WebDriver API实例讲解(41-50)

    41.操作Web页面的滚动条 (1)滑动页面的滚动条到页面的最下面. (2)滑动页面的滚动条到页面的某个元素. (3)滑动页面的滚动条向下移动某个数量的像素. package apiSample; i ...

  7. ASM9260T开发板使用

    ifconfig eth0 192.168.1.66 netmask 255.255.255.0 up   //设备iproute add default gw 192.168.1.1   //添加网 ...

  8. 启动代码之开iCache

    1.什么是cache,有什么用    cache是一种内存,叫高速缓存.从容量来说:CPU < 寄存器 < cache < DDR从速度来说:CPU > 寄存器 > ca ...

  9. 【python】没有root权限的时候安装Python package

    下载相关位置的包 1.首先在git上下载对应的包: 搜索package github,找到地址.使用 git clone https://xxx.git 命令 2.使用python setup.py ...

  10. Android 仿淘宝属性标签页

    直接看效果图相信这样的效果很多,我之前在网上找了很久没找到自己想要的! <?xml version="1.0" encoding="utf-8"?> ...