C#网络编程.2.套接字.TcpListener.TcpClient.服务端客户端通信
2012-03-05 17:53
453 查看
在TcpClient上调用GetStream()方法来获得连接到远程计算机的流。注意这里我用了远程这个词,当在客户端调用时,它得到连接服务端的流;当在服务端调用时,它获得连接客户端的流。接下来我们来看一下代码,我们先看服务端
streamClient.GetStream()方法获取到了连接至客户端的流,然后从流中读出数据并保存在了buffer缓存中,随后使用Encoding.Unicode.GetString()方法,从缓存中获取到了实际的字符串。最后将字符串打印在了控制台上。这段代码有个地方需要注意:在能够读取的字符串的总字节数大于BufferSize的时候会出现字符串截断现象,因为缓存中的数目总是有限的,而对于大对象,比如说图片或者其它文件来说,则必须采用“分次读取然后转存”这种方式
客户端
![](http://images.cnblogs.com/cnblogs_com/TivonStone/201203/201203051753093971.png)
同样的,和上篇的原理相同,如何实现多客户端与服务器通信等等,我这里抛个砖,接下来由大家自己继续深入了。
1. 单C<--->单S 通信
2. 多C<--->单S 通信
3. 单C多信息<--->单S 通信
4. 多C多信息<--->单S 通信
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace SocksTest { class Program { static void Main(string[] args) { int BufferSize=1000; Console.WriteLine("Server is running ... "); IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 }); TcpListener listener = new TcpListener(ip, 8500); listener.Start(); // 开始侦听 Console.WriteLine("Start Listening ..."); TcpClient remoteClient = listener.AcceptTcpClient();//接受挂起的连接请求 Console.WriteLine("Client Connected!{0} <-- {1}", remoteClient.Client.LocalEndPoint.ToString(), remoteClient.Client.RemoteEndPoint.ToString()); NetworkStream streamClient = remoteClient.GetStream(); Byte[] buffer=new Byte[BufferSize]; int bytesRead = streamClient.Read(buffer, 0, BufferSize); Console.WriteLine("Reading data,{0} bytes...",bytesRead); string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead); Console.WriteLine("Received:{0}",msg); Console.Read(); } } }
streamClient.GetStream()方法获取到了连接至客户端的流,然后从流中读出数据并保存在了buffer缓存中,随后使用Encoding.Unicode.GetString()方法,从缓存中获取到了实际的字符串。最后将字符串打印在了控制台上。这段代码有个地方需要注意:在能够读取的字符串的总字节数大于BufferSize的时候会出现字符串截断现象,因为缓存中的数目总是有限的,而对于大对象,比如说图片或者其它文件来说,则必须采用“分次读取然后转存”这种方式
// 获取字符串 byte[] buffer = new byte[BufferSize]; int bytesRead; // 读取的字节数 MemoryStream msStream = new MemoryStream(); do { bytesRead = streamToClient.Read(buffer, 0, BufferSize); msStream.Write(buffer, 0, bytesRead); } while (bytesRead > 0); buffer = msStream.GetBuffer(); string msg = Encoding.Unicode.GetString(buffer);
客户端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; namespace SocksClient { class Program { static void Main(string[] args) { Console.WriteLine("Client is running......"); TcpClient tcpClient; try { tcpClient = new TcpClient(); tcpClient.Connect("localhost", 8500); } catch (Exception e) { Console.WriteLine(e.ToString()); Console.Read(); return; } Console.WriteLine("Server Connected!{0} --> {1}", tcpClient.Client.LocalEndPoint.ToString(), tcpClient.Client.RemoteEndPoint.ToString()); NetworkStream streamServer = tcpClient.GetStream(); string msg = "Hi server,this is from Client"; byte[] buffer=Encoding.Unicode.GetBytes(msg); streamServer.Write(buffer, 0, buffer.Length); Console.Read(); } } }
![](http://images.cnblogs.com/cnblogs_com/TivonStone/201203/201203051753093971.png)
同样的,和上篇的原理相同,如何实现多客户端与服务器通信等等,我这里抛个砖,接下来由大家自己继续深入了。
1. 单C<--->单S 通信
2. 多C<--->单S 通信
3. 单C多信息<--->单S 通信
4. 多C多信息<--->单S 通信
相关文章推荐
- C#网络编程.2.套接字.TcpListener.TcpClient.服务端客户端通信
- C# 基于TcpListener和TcpClient的客户端服务端通信
- c# tcplistener 与 client通信 服务端 今天写一下
- linux下网络编程2:服务端和客户端进行TCP通信实例
- C#利用TcpListener和TcpClient类实现服务器和客户端的通信
- C#网络编程之TcpListener与TcpClient类常用方法与属性(7)
- C# client 与java netty 服务端的简单通信,客户端采用Unity。
- C#网络编程-TcpClient、TcpListener、UdpClient
- C#网络编程-TcpClient、TcpListener、UdpClient
- C#网络编程.套接字.TcpListener.TcpClient
- C# client 与java netty 服务端的简单通信,客户端采用Unity。
- C#:TcpClient(客户端) and TcpServer(服务端)
- .Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接
- [通信] C# TCP实现多个客户端与服务端 数据 与 文件的传输
- .Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接
- JAVA与C#的TCP通信——JAVA客户端,C#线程池服务端
- [C#基础]网络编程(二):TcpListener & TcpClient
- C#双端(服务端-客户端)网络通信动态链接库
- Android网络编程之TCP通信----简单客户端与服务端通信
- 黑马程序员--10.网络编程--06.【Clinet_Server通信原理】【TCP_客户端和服务端会话】【阻塞式方法的详解】