TCP 同步传输:客户端发送,服务器段接收

1、服务器端程序

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

  

class Program
    {
        static void Main(string[] args)
        {
            const int BufferSize = 8192;//缓存大小

            Console.WriteLine("server is running ...");
            IPAddress ip = new IPAddress(new byte[] { 192, 168, 1, 102 });//IP
            TcpListener listener = new TcpListener(ip, 8500);
            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, 0, BufferSize);

            //获得请求字符串
            string msg = Encoding.Unicode.GetString(buffer, 0, 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,0,BufferSize);
     ms.Write(buffer,0,bytesRead);
}while(bytesRead > 0);

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"), 8500);

            }
            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, 0, 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 同步传输:客户端发送,服务器段接收,布布扣,bubuko.com

时间: 2024-11-05 12:22:46

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

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

主要内容:客户端调用connect()时的TCP层实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd connect的TCP层实现 SOCK_STREAM类socket的TCP层操作函数集实例为tcp_prot,其中客户端使用tcp_v4_connect()来发送SYN段. struct proto tcp_prot = { .name = "TCP", ... .connect = tcp_v4_connect, ... .h.has

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

一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者多个客户端提供所需要的服务.它存在的目的就是等待客户的请求,然后给客户服务,再接着等待请求. 而客户端,就来连上一个服务器,提出自己的请求,然后等待获得反馈. 比如说,打印机就是一个服务器的例子,与之相连的计算机就是客户端,通过网络连接打印机后,给它提出服务需求(打印)和传输数据(传输内容),然后打

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

########################### #DATE 2016-07-29                         # #Authur by Denilas Yeung             # ########################### 一.安装msmtp 下载msmtp:http://jaist.dl.sourceforge.net/project/msmtp/msmtp/1.6.5/msmtp-1.6.5.tar.xz 因为文件格式为xz,解压方式为:

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

今天介绍golang版本的通信基础:基于TCP的客户端和服务器实现,参考书籍:The Way To Go 那时学习java的时候也是做过通信的,当时是socket编程,服务器监听某一个端口,然后客户机去连接,简单的聊天室就实现了.后来有变成多线程的聊天室,可以进行群聊什么的了,后期可以传图片传音乐,加上UI那一块儿,山寨QQ就OK了.现在我来用golang实现一下简易的聊天室,实现了客户机连接服务器,给服务器发消息,服务器接受消息,客户机退出,服务器可以收到退出信息,以及多个客户机同时连入一个服

10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

/**10.使用TCP协议完成一个客户端一个服务器.客户端从键盘输入读取一个字符串,发送到服务器. 服务器接收客户端发送的字符串,反转之后发回客户端.客户端接收并打印. * 客户端*/ import java.io.*; import java.net.*; public class Test10_Client { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.0.

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

实现功能:Ubuntu上通过多线程实现服务器并发给客户端发送文件,携带包头,根据包头信息命名新文件.适用于短连接. 问题小结: 01. 调用嵌套在结构体中的结构体char 数组成员时,需要动态分配内存. 02. 使用select() 监听socket变化.select() 其中三个参数分别监听读,写,出错. 03. 每条线程在同时发送文件时,需要使用独立的变量,如accept(), FILE *fd, *buff 等,用结构数组 + 标号实现. 04. struct stat stat_buff

C语言 Socket入门示例2——模拟远程CMD(客户端向服务器发送命令,服务端执行该命令)

只要把上一篇文章"C语言 Socket入门示例1"中的两段程序彻底搞懂,那么再看本文就没有任何难度了,因为仅仅是对上篇文章中服务端代码的简单修改扩充.但是简单修改过后,功能变得异常强大,犹如一个远程CMD.随着不断深入学习,功能将会变得越来越强大.欢迎大家评论指点. 1.服务端(Server): #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib")

C语言 Socket入门示例1—— 单工通信(客户端向服务器发送消息)

如果对Windows API不太熟悉.对TCP/IP通信协议不太熟悉,或者对C语言本身不太熟悉的话,学习Socket会有点难受的.以前学习操作系统的时候,被API吓怕了,很多莫名其妙的API有着多如牛毛的参数,令人费解.学习计算机网络的时候,又有那么多的协议,并且很多协议本身比较复杂,什么三次握手建立连接,什么四次握手释放链接等等,也没有学得特别透彻.更遗憾的是,以前学C的时候,误以为自己把C学会了,误以为C就那么几个头文件而已,就一个黑框子而已. 现在,经过一段时间的痛苦磨练,又有了一些新的认

TCP协议的客户端与服务器的通信过程

使用TCP时,客户端与服务器端的通信流程 服务器初始化1)调用socket,创建文件描述符fd2) 调用bind将fd与服务器的IP与PORT绑定3)调用listen将套接字设为监听模式,准备接收客户端连接请求4)调用accept等待并接收客户端的连接请求,建立好TCP连接后,该函数会返回一个新的已连接套接字newfd 建立连接1)客户端调用socket创建文件描述符2)调用connect,向服务器发送连接请求3)connect会发送一个请求SYN段并阻塞等待服务器应答(第一次握手)4)服务器收