1、服务器端程序

  可以在TcpClient上调用GetStream()方法来获的链接到远程计算机的网络流NetworkStream。当在客户端调用时,他获的链接服务器端的流;当在服务器端调用时,他获得链接客户端的流。

  

class Program
{
static void Main(string[] args)
{
const int BufferSize = ;//缓存大小 Console.WriteLine("server is running ...");
IPAddress ip = new IPAddress(new byte[] { , , , });//IP
TcpListener listener = new TcpListener(ip, );
listener.Start();//开始侦听 Console.WriteLine("start listener ..."); //获取一个链接中断方法
TcpClient remoteclient = listener.AcceptTcpClient();
//打印链接到客户端的信息
Console.WriteLine("client connected ! Local:{0}<-- Client:{1}", remoteclient.Client.LocalEndPoint, remoteclient.Client.RemoteEndPoint); //获取流,并写入Buffer中
NetworkStream streamToClient = remoteclient.GetStream();
byte[] buffer = new byte[BufferSize];
int bytesRead = streamToClient.Read(buffer, , BufferSize); //获得请求字符串
string msg = Encoding.Unicode.GetString(buffer, , bytesRead);
Console.WriteLine("Received:{0}[{1}bytes]", msg, bytesRead); Console.WriteLine("\n\n输入\"Q\"键退出。");
ConsoleKey key;
do
{
key = Console.ReadKey(true).Key; } while (key != ConsoleKey.Q);
}
}

  如果传递的数据字节比较大,如图片、音频等,则采用“分次读取然后转存”的方式,代码如下:

//获取字符串
byte [] buffer = new byte[BufferSize]; int bytesRead; //读取的字节数 MemoryStream ms =new MemoryStream();
do{
bytesRead = streamToClient.Read(buffer,,BufferSize);
ms.Write(buffer,,bytesRead);
}while(bytesRead > ); buffer = msStream.GetBuffer();
string msg = Encoding.Unicode.GetString(buffer);

2、客户端程序

  客户端向服务器发送字符串的代码与服务器端类似,先获取链接服务器端的流,将字符串保存到buffer缓存中,再写入流,写入流的过程就相当于将消息发送到服务器端。

class Program
{
static void Main(string[] args)
{
Console.WriteLine("client is running ...");
TcpClient clint;
try
{
clint = new TcpClient();
//与服务器建立连接
clint.Connect(IPAddress.Parse("192.168.1.102"), ); }
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
} //打印连接到服务器端的信息
Console.WriteLine("client connected ! Local:{0}<-- Client:{1}", clint.Client.LocalEndPoint, clint.Client.RemoteEndPoint); //要发送的信息
string msg = "hello";
NetworkStream streamToServer = clint.GetStream(); //获取缓存
byte[] buffer = Encoding.Unicode.GetBytes(msg);
//发送
streamToServer.Write(buffer, , buffer.Length);
Console.WriteLine("Sent:{0}", msg); Console.WriteLine("\n\n输入\"Q\"键退出。");
ConsoleKey key;
do
{
key = Console.ReadKey(true).Key; } while (key != ConsoleKey.Q); }
}

这样就可以成功的发送和接收一个字符串了,如果想完成一些复杂的不间断的交互就需要自己做一些调整了。

TCP 同步传输:客户端发送,服务器段接收的更多相关文章

  1. tcp程序设计--客户端获取服务器输入输出流

    tcp程序设计--客户端获取服务器输入输出流 思路: 第一步:实例化一个ServerSocket对象(服务器套接字),用来等待网络上的请求(也就是等待来连接的套接字) 第二步:调用accept()方法 ...

  2. centos7安装Logwatch配合msmtp邮件客户端发送服务器监控分析日志

    ########################### #DATE 2016-07-29                         # #Authur by Denilas Yeung     ...

  3. TCP连接建立系列 — 客户端发送SYN段

    主要内容:客户端调用connect()时的TCP层实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd connect的TCP层实现 SOCK_STRE ...

  4. 2015/12/14 Python网络编程,TCP/IP客户端和服务器初探

    一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者 ...

  5. tcp/ip客户端与服务器

    单击“发送数据”把数据发送到指定IP地址的指定端口号 using System; using System.Collections.Generic; using System.ComponentMod ...

  6. go实现的简易TCP的客户端和服务器

    今天介绍golang版本的通信基础:基于TCP的客户端和服务器实现,参考书籍:The Way To Go 那时学习java的时候也是做过通信的,当时是socket编程,服务器监听某一个端口,然后客户机 ...

  7. HAProxy负载均衡保持客户端和服务器Session亲缘性的3种方式

    1 用户IP 识别  haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令) 配置指令: balance source 配置实例: backe ...

  8. TCP socket 多线程 并发服务器(发送)与客户端(接收)

    实现功能:Ubuntu上通过多线程实现服务器并发给客户端发送文件,携带包头,根据包头信息命名新文件.适用于短连接. 问题小结: 01. 调用嵌套在结构体中的结构体char 数组成员时,需要动态分配内存 ...

  9. 客户端和服务器最多能发送和接收多少TCP连接数?

    1. 对于服务器,每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,就会返回错误. 我们知道操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的.由于每个TCP ...

随机推荐

  1. C# ORM框架

    SQLSUGAR http://www.codeisbug.com/Doc/8/1159 附带mysql工具类,最优使用上面sqlsugar using System; using System.Co ...

  2. 在vue路由当中使用keep-alive避免多次加载组件,减少消耗

    今天在vue当中使用了full-page这个组件.但是发现在每次路由跳转完之后,再回到使用fullpage的这个页面,fullpage会报错,fullpage只能初始化一次. 这个时候给路由使用kee ...

  3. FZOJ Problem 2150 Fire Game

                                                                                                        ...

  4. TroubleShoot: SPD 2013 工作流模板问题解决办法

    1. 问题描述: SPD 2013 不能使用2013 工作流模板,在创建过程中,下载更新信息时出现以下错误描述: The server has tried to deliver this messag ...

  5. 用promise做图片的预加载

    var url='jsonp-master/0.jpg' var url1='jsonp-master/1.jpg' var url2='jsonp-master/2.jpg' var img=doc ...

  6. How to build and run ARM Linux on QEMU from scratch

    This blog shows how to run ARM Linux on QEMU! This can be used as a base for later projects using th ...

  7. 标准C程序设计七---76

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  8. 理解webpack中的devTool的配置项

    2.1. eval  eval 会将每一个module模块,执行eval,执行后不会生成sourcemap文件,仅仅是在每一个模块后,增加sourceURL来关联模块处理前后对应的关系.在webpac ...

  9. upper_bound——自己的实现

    int BSearch() { int ln(1),rn(n+1); while(ln+1<rn) { int mid=(ln+rn)>>1; if (Check(mid)) { l ...

  10. javascript --- 递归的简单理解

    递归函数大家都应该比较熟吧?那么,如何在JavaScript中书写一个完美的递归函数呢?且听我娓娓道来. 递归函数 写的时候,查了一下维基百科对递归函数的定义,恕我愚钝,简直太深奥了!所以,我还是简单 ...