(转)C# Socket简单例子(服务器与客户端通信)
本文转载自:http://blog.csdn.net/andrew_wx/article/details/6629721
这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信。
注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息边界问题、端口号是否被占用、消息命令的解析问题等。。
下面是两个程序的代码,(两个程序均为控制台程序)
先发服务端的(Server)完整代码如下:
引入命名空间:
- using System.Net.Sockets;
- using System.Net;
- using System.Threading;
完整代码如下:
- 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)的完整代码如下:
引入命名空间:
- using System.Net;
- using System.Net.Sockets;
- using System.Threading;
完整代码:
- 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)
若编译失败,可到下面的地址下载项目文件:
http://download.csdn.net/source/3465765
(转)C# Socket简单例子(服务器与客户端通信)的更多相关文章
- python socket之tcp服务器与客户端demo
python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...
- C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法
C#调用接口注意要点 在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...
- js json简介(json的本质也是字符串)(用于服务器和客户端通信)
js json简介(json的本质也是字符串)(用于服务器和客户端通信) 一.总结 1.json的语法和js的语法非常像,只是json的键和值都是双引号,因为json的本质也是字符串 2.json是一 ...
- 一个 Java 的 Socket 服务器和客户端通信的例子
一个 HelloWord 级别的 Java Socket 通信的例子.通讯过程: 先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求.然后运行 Client 端,客户端发出连接请 ...
- “TCP:三次握手”分析——以一个简单的“服务器”和“客户端”为例
linux&C这两天学到了网络编程这一章,自己写了一个小的"服务器"和"客户端"程序,目的在于简单理解tcp/ip模型,以及要搭建一台简单服务器,服务器 ...
- socket,模拟服务器、客户端通信
服务器代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;u ...
- socket,实现服务器和客户端对话
服务器: #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string>#include<WinSock ...
- C# Socket简单例子(服务器与客户端通信)
这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...
- Netty——简单创建服务器、客户端通讯
Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程 ...
随机推荐
- 求中位数,O(n)的java实现【利用快速排序折半查找中位数】
查找无序数组的中位数,要想时间复杂度为O(n)其实用计数排序就能很方便地实现,在此讨论使用快速排序进行定位的方法. 1.中位数定义 2.算法思想 3.Java代码实现 4.时间复杂度分析 5.附录 中 ...
- 源码安装LNMP与搭建Zabbix
系统环境:CentOS release 6.5 (Final) 搭建Zabbix 3.0对PHP环境要求>= 5.4 一.下载NMP的软件包: N:wget http://nginx.org/d ...
- Minhash 算法 及其应用
背景: 我遇到一个问题,要计算140万商品的杰卡德相似度.如果直接要直接两两计算的话,这计算量根本算不了,而且也没必要. 分析: 在这些商品中很多商品的相似度并不高,也就是说其中达到相似度阈值的商品只 ...
- Vector3函数理解-计算两向量之间的角度
1.已知两个向量dirA,dirB.Vector3 dirA = new Vector3(-1,1,0); Vector3 dirB = new Vector3(-1,1,1);2.使向量处于同一个平 ...
- idea结合git使用三
1.将本地代码提交到码云上面的步骤 2.先提交到本地Git的仓库,通过commit files 3.然后vcs----->git---->push,将本地仓库代码,推送到码云公司项目mas ...
- Nginx优化思路
对于高性能网站 ,请求量大,如何支撑? 1方面,要减少请求 对于开发人员----合并css, 背景图片, 减少mysql查询等. 2: 对于运维 nginx的expires ,利用浏览器缓存等,减少查 ...
- Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map Map<RowKey, SortedMap<ColumnKey, ColumnValue>>
Cassandra之中一共包含下面5种Key: Primary Key Partition Key Composite Key Compound Key Clustering Key 首先,Prima ...
- 【spark】IDEA建立基于scala语言的spark项目
1.新建一个Spark项目 2.选择maven,用模板创建项目 如果 没有这个模板,我们需要添加一个 我们这里使用的是1.6版本Archetype Group Id : net.alchim31.ma ...
- 【MAVEN】笔记
引言 Maven是Java项目开发中的重要组成部分,了解它学习它是我们的必修课. Maven是什么? Maven是一个项目管理和综合工具.Maven是标准化的产物,使用标准的目录结构和默认构建生命周期 ...
- LeetCode OJ:Maximum Subarray(子数组最大值)
Find the contiguous subarray within an array (containing at least one number) which has the largest ...