TCP 同步传输:客户端发送,服务器段接收
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 同步传输:客户端发送,服务器段接收的更多相关文章
- tcp程序设计--客户端获取服务器输入输出流
tcp程序设计--客户端获取服务器输入输出流 思路: 第一步:实例化一个ServerSocket对象(服务器套接字),用来等待网络上的请求(也就是等待来连接的套接字) 第二步:调用accept()方法 ...
- centos7安装Logwatch配合msmtp邮件客户端发送服务器监控分析日志
########################### #DATE 2016-07-29 # #Authur by Denilas Yeung ...
- TCP连接建立系列 — 客户端发送SYN段
主要内容:客户端调用connect()时的TCP层实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd connect的TCP层实现 SOCK_STRE ...
- 2015/12/14 Python网络编程,TCP/IP客户端和服务器初探
一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者 ...
- tcp/ip客户端与服务器
单击“发送数据”把数据发送到指定IP地址的指定端口号 using System; using System.Collections.Generic; using System.ComponentMod ...
- go实现的简易TCP的客户端和服务器
今天介绍golang版本的通信基础:基于TCP的客户端和服务器实现,参考书籍:The Way To Go 那时学习java的时候也是做过通信的,当时是socket编程,服务器监听某一个端口,然后客户机 ...
- HAProxy负载均衡保持客户端和服务器Session亲缘性的3种方式
1 用户IP 识别 haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令) 配置指令: balance source 配置实例: backe ...
- TCP socket 多线程 并发服务器(发送)与客户端(接收)
实现功能:Ubuntu上通过多线程实现服务器并发给客户端发送文件,携带包头,根据包头信息命名新文件.适用于短连接. 问题小结: 01. 调用嵌套在结构体中的结构体char 数组成员时,需要动态分配内存 ...
- 客户端和服务器最多能发送和接收多少TCP连接数?
1. 对于服务器,每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,就会返回错误. 我们知道操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的.由于每个TCP ...
随机推荐
- Spring之BeanFactory与ApplicationConText区别
使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org ...
- c#.net分类上升达人~~~呵呵。。。
原文发布时间为:2008-11-11 -- 来源于本人的百度文章 [由搬家工具导入] 觉得自己蛮无聊的~~~~~~~~~(>_<)~~~~
- udp 多播
先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一 ...
- 切換 java compiler 版本
有些程式在執行時會顯示需要較新的 java jre 版本, 若系統裝有兩個 java jre 可以使用下列指令切協版本, sudo update-alternatives --config java ...
- JProfile 9.2 linux安装及windows客户端远程监控
http://blog.csdn.net/fengzhou0920/article/details/52119039 1. 测试环境 服务器:Linux X64;tomcat 7.0;jd ...
- C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介
C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介 IP是一种普遍应用于因特网.允许不同主机能够相互找到对方的寻址协议.IP地址由4个十进制的数字号码所组成, ...
- 关于TS返回 Can't use function return value in write context 问题
在项目开发过程中,出现某一接口文件间歇性出现500错误,间歇性出现说明是有条件才会产生,查看错误日志显示:Fatal error: Can't use function return value in ...
- CSS-滤镜 -webkit-filter
css滤镜属性,可以在元素呈现之前,为元素的渲染提供一些效果,如模糊.颜色转移之类的.滤镜常用于调整图像.背景.边框的渲染. 语法: webkit-filter: none | blur(px) | ...
- waypoint+animate元素滚动监听触发插件实现页面动画效果
最近在做一个官网类型滚动加载动画,使用到waypoint监听事件插件和animate动画样式,两者结合完美实现向下滚动加载动画,但是没有做向上滚动撤消动画,留待以后有空研究 首先来介绍下jquery. ...
- 【面试 IO】【第十一篇】 java IO
1.什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别 1>Bit最小的二进制单位 ,是计算机的操作部分 取值0或者1 2>Byte是计算机 ...