本文转载自: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. vue2 遇到的问题汇集ing

    1 .子路由 { path: '/order-list', //订单列表 name: "order-list", component(resolve) { require.ensu ...

  2. Xcode删除无用的Symbols信息

    open ~/Library/Developer/Xcode/iOS\ DeviceSupport 进入后对不需要的版本手动Delete.

  3. Makefile的补充学习2

    Makefile中使用通配符(1)* 若干个任意字符(2)? 1个任意字符(3)[] 将[]中的字符依次去和外面的结合匹配 还有个%,也是通配符,表示任意多个字符,和*很相似,但是%一般只用于规则描述 ...

  4. js获取一周的日期范围

    function getWeek() { this.nowTime = new Date(); this.init = function() { this.dayInWeek = this.nowTi ...

  5. Could not publish server configuration for Tomcat v6.0 Server at localhost.错误问题解决

    经常在使用tomcat服务器的时候 总会发生一些莫名其妙的错误. 就像下面这个错误: 在配置文件中存在多个/MyWeb的配置,导致不能发布服务. 错误信息: Could not publish ser ...

  6. python基础之socket编程(二)

    ssh远程执行命令: 思路分析: 客户端给服务端发送命令,服务端返回一个输出结果传给客户端. #coding:utf-8 #买手机 import socket import struct import ...

  7. 点击bindingNavigatorAddNewItem 关联的dataGridView不会新增一行

    方法一. 在设计界面,修改bindingNavigator1的属性AddNewItem 为“(无)”: 方法二. 在设计器自动生成的代码中找到这一行:             // bindingNa ...

  8. 发现的好东西——bitset

    先向各位大佬介绍一个水题 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2( ...

  9. 持久层框架:MyBatis 3.2(2)

    每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得.SqlSessi ...

  10. android官网被封掉了,只好用这个网站进谷歌了!嘎嘎

         http://developer.android.com/sdk/index.html    这个可以进去,但是必须是搜狐 .360,uc都不用特意FQ     http://173.1 ...