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. Python [拷贝copy / 深度拷贝deepcopy] | 可视化理解

    Python 是一门面向对象的语言, 在Python一切皆对象. 每一个对象都有由以下三个属性组成: ------------------------------------------------- ...

  2. UVa11762 Race to 1

    期望DP 一个数只能分解成不大于它的数,那么转移构成拓扑关系. 试了一下预处理出不大于x的质数个数,然而程序并没有变快 /*by SilverN*/ #include<algorithm> ...

  3. github每次push提交都要输入账号密码

    问题产生的原因是在克隆的时候使用的是https的方式或者用一些特殊的指令来克隆的github项目源,如 golang里的go get github.com/...... 没次提交push的时候都会提示 ...

  4. Error: spawn xxxx ENOENT原因与解决

    背景: npm 运行项目时出现了该问题 原因: path环境变量配置不当,导致无法找到指定的程序,如Error: spawn cmd.exe ENOENT,出现该问题的原因是因为没有将%SystemR ...

  5. HDU6214 Smallest Minimum Cut

    题目链接:HDU6214 留一个链式前向星+Dinic模板(希望不要被某人发现,嘿嘿嘿). #include <cstdio> #include <cstring> #incl ...

  6. windows命令行更改IP地址

    修改IP地址时,提示出现一个意外情况 netsh interface ip set address "以太网" static 192.168.3.151 255.255.255.0 ...

  7. netty-类图对比

  8. 高性能内存池NedAlloc

    http://www.nedprod.com/programs/portable/nedmalloc/ http://blog.sina.com.cn/s/blog_6f5b220601012x4t. ...

  9. spring事务再次理解

    2.2.3 只读 事务的第三个特性是它是否为只读事务.如果事务只对后端的数据库进行该操作,数据库可以利用事务的只读特性来进行一些特定的优化.通过将事务设置为只读,你就可以给数据库一个机会,让它应用它认 ...

  10. Excel导入的HDR=YES; IMEX=1详解

    参数HDR的值:HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用.系统默认的是YES 参数Excel 8.0对于Excel 97以上版本都 ...