C# Socket编程 服务端与客户端(一)
2016-11-15 20:39
375 查看
首先介绍客户端,再介绍服务端
客户端:
在threadTestHeart中,首先根据IP等新建一个Socket heartSocket对象,接着将要传送的数据写进一个responseParam内,使用JsonConvert将要传输的数据Json化,最后将json以字节的形式通过Socket发送出去。在Main函数里一共新建了两个线程同时往同一个服务端发送数据(主要为了与之后我要讲的多线程并发联系,若简单起见,也可直接在Main函数内调用一下threadTestHeart方法即可),结果如代码后的图所示。
<
4000
/p>
客户端结果:
服务端:
与客户端类似,不过多了几行检测Socket是否有连接的代码。
客户端与服务端的结果虽然看似简单,但里面却体现出了很多Socket编程值得注意的地方,细细体会,其中服务端没有用到多线程与并发,只是简单的将每个客户端链接的数据显示,我将在之后做出修改,到时比较区别,细细体会,嘿嘿。
参考:MSDN的Socket类
客户端:
在threadTestHeart中,首先根据IP等新建一个Socket heartSocket对象,接着将要传送的数据写进一个responseParam内,使用JsonConvert将要传输的数据Json化,最后将json以字节的形式通过Socket发送出去。在Main函数里一共新建了两个线程同时往同一个服务端发送数据(主要为了与之后我要讲的多线程并发联系,若简单起见,也可直接在Main函数内调用一下threadTestHeart方法即可),结果如代码后的图所示。
<
4000
/p>
static void Main(string[] args) { for (int i = 0; i < 2; i++) { new Thread(new ThreadStart(threadTestHeart)).Start(); } Console.ReadKey(); } public static void threadTestHeart() { IPAddress ip = IPAddress.Parse("192.168.5.83"); IPEndPoint ipEnd = new IPEndPoint(ip, 3800); Socket heartSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); int socketCount = 0; heartSocket.Connect(ipEnd); while (socketCount < 3) { Dictionary<string, string> responseParam = new Dictionary<string, string>(); responseParam["Thread"] = Thread.CurrentThread.GetHashCode()+""; responseParam["MessageNo"] = socketCount.ToString(); string bodyStr = JsonConvert.SerializeObject(responseParam); byte[] body = Encoding.UTF8.GetBytes(bodyStr); string packStr = string.Format("HEAD{0:000}", body.Length) + bodyStr; heartSocket.Send(Encoding.UTF8.GetBytes(packStr)); Console.WriteLine("Socket NO: "+Thread.CurrentThread.GetHashCode()+ " MessageNo "+socketCount); socketCount++; Thread.Sleep(500); } heartSocket.Close(); }
客户端结果:
服务端:
与客户端类似,不过多了几行检测Socket是否有连接的代码。
internal SocketServer() { Socket m_svrSock = null; IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 3800); m_svrSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); m_svrSock.Bind(endPoint); m_svrSock.Listen(100); Console.WriteLine("Listen Up..."); int customerCount = 1; while (true) { Socket client; client = m_svrSock.Accept(); if (!client.Poll(-1, SelectMode.SelectRead)) { continue; } Console.WriteLine("Customer:" + customerCount); customerCount++; int lineCount = 0; byte[] receive = new byte[7]; while (true) { Thread.Sleep(500); if (!client.Poll(-1, SelectMode.SelectRead)) { lineCount++; continue; } if (client.Receive(receive, 7, SocketFlags.None) == 0) { Console.WriteLine("no data here!The customer has closed his client!"); break; } string lengthStr = Encoding.UTF8.GetString(receive, 4, 3); int length = int.Parse(lengthStr); byte[] receiveBody = new byte[length]; client.Receive(receiveBody, length, SocketFlags.None); Console.WriteLine("line:" + lineCount + Encoding.UTF8.GetString(receiveBody)); lineCount++; } } }服务端结果如图:
客户端与服务端的结果虽然看似简单,但里面却体现出了很多Socket编程值得注意的地方,细细体会,其中服务端没有用到多线程与并发,只是简单的将每个客户端链接的数据显示,我将在之后做出修改,到时比较区别,细细体会,嘿嘿。
参考:MSDN的Socket类
相关文章推荐
- C# socket编程 异步服务端 同步客户端
- C# socket编程 异步服务端 同步客户端(转)
- C# Socket编程 服务端与客户端(二)
- C#Socket编程多客户端基于同一服务端通信
- 最基本的Socket编程(服务端跟客户端通信) C#版
- C# Socket编程 服务端与客户端(三) 异步客户端
- C#服务端判断客户端socket是否已断开的方法
- C#网络编程之客户端编程与服务端的一般步骤(8)
- 仿QQ聊天程序SOCKET编程服务端与客户端,成功通信
- 【黑马程序员】Socket编程实现服务端和客户端的交互
- C++ socket编程 实现服务端与客户端的通讯
- Boost socket 同步编程示例(服务端,客户端)
- Linux/Unix服务端和客户端Socket编程入门实例(含源码下载)
- c# WINFORM SOCKET编程-简单聊天程序(服务端)(转载)
- C# SOCKET编写的简单聊天通信程序(客户端+服务端)
- socket 通信 入门3 android 客户端 C# 服务端
- java网络编程--socket服务端客户端(1:1)
- c# 下 socket 客户端 编程
- C#中面向连接的客户端与服务端编程
- C# Socket聊天程序(一个服务端,多个客户端)