zoukankan      html  css  js  c++  java
  • .NET技术之美-网络编程

    概要

    .NET框架提供了system.net.*的一系列网络编程,其中system.net.socket主要提供低层TCP,UDP通信,system.Net高层下的通信HTTP,FTP,SMTP通信

    1、面向连接的传输协议-TCP

    什么是面向连接:首先必须要有一个握手过程,确认连接成功之后才能传输数据.

    TCP最大的特点是全双工:就是A与B交互,数据可以从A到B,也可以从B到A

    点对点:只能是一对一不能一对多

    2、套接字

    套接字的两个重要的属性:发起连接的本地IP和端口号,远程的IP地址和端口号

    .NET框架中提供了system.net.sockets.socket类,两个帮助类TcpClient和TcpListener

    TcpListener持续对端口侦听,如果发现对象,则会生成一个TcpClient对象来处理和发送消息,而且同时TcpListen还会同时监听端口

    2.1、server创建并监听接口

    console.writerine("server is running");
       ipaddress ip=new ipaddress.parse("192.168.0.100");
       TcpListen listerner=new TcpListern(ip,8500);
       listernen.start();
       console.writerline("start Listeing..");

    2.2、client创建连接和接口

    console.writerline("Client is running");
    TcpClient client=new TcpClient();
    client.connect(ipaddress.parse("192.168.0.100"),8500);

    2.3、server端获取客户端连接状态

    console.writerine("server is running");
       ipaddress ip=new ipaddress.parse("192.168.0.100");
       TcpListen listerner=new TcpListern(ip,8500);
       listernen.start();
       console.writerline("start Listeing..");
       TcpClient remoteClient=listener.AcceptTcpClient();
       console.writerline("client connected!local:{0} <--Client:{1}",remoteClient.client.localendpoint,remoteClient.client.remoteendpoint)

    server端获取多个客户端的连接

    while(true){
        TcpClient remoteClient=listener.AcceptTcpClient();
       console.writerline("client connected!local:{0} <--Client:{1}",remoteClient.client.localendpoint,remoteClient.client.remoteendpoint)
    }

    AcceptTcpClient()方法在没有收到客户端的连接的之前,不会向前持行

    2.4、同步传输字符串

    2.4.1、server端接收

    .NET框架提供了TcpClient的getStream()方法获取client连接server的流

    const int buffersize=8192;
       console.writerine("server is running");
       ipaddress ip=new ipaddress.parse("192.168.0.100");
       TcpListen listerner=new TcpListern(ip,8500);
       listernen.start();
       console.writerline("start Listeing..");
       TcpClient remoteClient=listener.AcceptTcpClient();
       console.writerline("client connected!local:{0} <--Client:{1}",remoteClient.client.localendpoint,remoteClient.client.remoteendpoint)
    ////
       networkstream streamToClient=remoteClient.GetSream();
       byte[] buff=new byte[buffersize];
       int byteRead=streamToClient.Read(buffer,0,buffersize);
       string msg=encoding.unncode.getstring(buffer,0,bytesread);

    2.4.2、Client发送

    同样client需要发送消息,也需要获取server端的流

    networkstream streamToServert=client.GetSream();
    byte[] buff=new byte[buffersize];
    streamToClient.writer(buffer,0,buffersize); 

    2.5、连接总结

    1.不使用do/while,server中只用一个listener.accepttcpclient(),则server端可以出来来自一个client的请求

    2.使用一个do/while,将listener.accepttcpclient(),TcpClient.GetStream().Read()方法都放在这个循环内,那么server可以处理多个client,但每个client只能处理一个请求

    3.使用一个do/while,将listener.accepttcpclient(),TcpClient.GetStream().Read()方法都放在这个循环外,那么server可以处理一个client多个请求

  • 相关阅读:
    intellij idea svn 修改文件后,父文件夹也标注修改
    IntelliJ IDEA 下的SVN使用
    在IDEA中实战Git
    九种浏览器端缓存机制知多少(转)
    tomcat实现多端口、多域名访问
    备忘提醒
    IntelliJ IDEA像Eclipse一样打开多个项目(转)
    IntelliJ Idea 常用快捷键列表
    将eclipse的maven项目导入到intellij idea中
    微信公众号开发JS-SDK(1.2)
  • 原文地址:https://www.cnblogs.com/ilooking/p/4363081.html
Copyright © 2011-2022 走看看