`

Socket——实现客户端和服务端的文件传送

 
阅读更多

 

  1. Socket 概念
socket的英文原义是“孔”或“插座”。作为4BDS UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
  1. Socket 实现原理
  2. Demo

下面是示例程序的简单步骤说明

服务器端:

第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;

第二步:建立一个Socket对像;

第三步:用socket对像的Bind()方法绑定EndPoint;

第四步:用socket对像的Listen()方法开始监听;

第五步:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;

第六步:通信结束后一定记得关闭socket;

代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace server
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            
int port = 2000;
            
string host = "127.0.0.1";


            
///创建终结点(EndPoint)
            IPAddress ip  = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
            IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例


            
///创建socket并开始监听
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
            s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
            s.Listen(0);//开始监听
            Console.WriteLine("等待客户端连接");


            
///接受到client连接,为此连接建立新的socket,并接受信息
            Socket temp = s.Accept();//为新建连接创建新的socket
            Console.WriteLine("建立连接");
            
string recvStr = "";
            
byte[] recvBytes = new byte[1024];
            
int bytes;
            bytes 
= temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
            recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);


            
///给client端返回信息
            Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来
            string sendStr = "ok!Client send message successful!";
            
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
            temp.Send(bs, bs.Length, 
0);//返回信息给客户端
            temp.Close();
            s.Close();
            Console.ReadLine();
        }

       
    }

}


server结果:


客户端:

第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;

第二步:建立一个Socket对像;

第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;

第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;

第五步:用socket对像的Receive()方法接受服务器发来的信息 ;

第六步:通信结束后一定记得关闭socket

代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace Client
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            
try
            
{
                
int port = 2000;
                
string host = "127.0.0.1";

                
///创建终结点EndPoint
                IPAddress ip = IPAddress.Parse(host);
                
//IPAddress ipp = new IPAddress("127.0.0.1");
                IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例


                
///创建socket并连接到服务器
                Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
                Console.WriteLine("Conneting…");
                c.Connect(ipe);
//连接到服务器


                
///向服务器发送信息
                string sendStr = "hello!This is a socket test";
                
byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节
                Console.WriteLine("Send Message");
                c.Send(bs, bs.Length, 
0);//发送信息


                
///接受从服务器返回的信息
                string recvStr = "";
                
byte[] recvBytes = new byte[1024];
                
int bytes;
                bytes 
= c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                Console.WriteLine(
"client get message:{0}", recvStr);//显示服务器返回信息

                
///一定记着用完socket后要关闭
                c.Close();

            }

            
catch (ArgumentNullException e)
            
{
                Console.WriteLine(
"argumentNullException: {0}", e);
            }

            
catch (SocketException e)
            
{
                Console.WriteLine(
"SocketException:{0}", e);
            }


            Console.WriteLine(
"Press Enter to Exit");
        }

    }

}


Client端结果:

 

分享到:
评论

相关推荐

    Linux环境下C语言Socket编程——客户端向服务端单次发送一个或多个文件的功能

    网上很多有关socket文件传输的源码都是每次只能发送一个文件,如果想传输多个文件,不但需要多次交互,还需要把每个文件的文件名都输入进去,很不方便,所以进行了一个小扩展:即客户端可以将打算传送的多个文件都先...

    Android源码——仿QQ客户端及服务端源码.zip

    《Android源码——仿QQ客户端及服务端源码》是一个针对Android平台的开源项目,旨在模仿QQ客户端和服务端的功能和架构。这个项目对于学习和理解Android应用开发,特别是即时通讯应用的实现,提供了宝贵的参考资料。 ...

    mina 长连接 客户端+服务端

    Mina 提供了一套完整的API来创建客户端和服务端,包括创建Socket通道、处理I/O事件、编码和解码数据等。下面我们将详细讲解如何利用Mina实现长连接的客户端和服务端: 1. **服务端实现**: - 首先,我们需要创建一...

    基于socket通信的服务端和客户端

    "基于socket通信的服务端和客户端"是一个典型的网络编程课题,主要涉及C++语言实现的TCP/IP通信。Socket是网络通信中的基本接口,它允许应用程序通过网络发送和接收数据。以下是关于这个主题的详细知识点: 1. **...

    JavaSE实战——客户端上传文件到服务端

    在客户端,我们需要创建一个Socket对象,指定服务器的IP地址和端口号,然后通过Socket的输出流(OutputStream)将文件数据发送到服务端。 2. **文件操作**:在客户端,我们需要读取本地文件的内容。Java的`java.io`...

    基于superSocket——AForge的UDP摄像并传输视频案例

    这个案例"基于SuperSocket——AForge的UDP摄像并传输视频"聚焦于使用这两种技术来实现实时视频流的捕获和传输。下面我们将深入探讨SuperSocket、AForge.NET库以及如何利用它们进行UDP视频传输。 首先,**Super...

    C#WebSocket客户端及服务端Demo源代码

    在提供的压缩包中,有两个主要的文件——`WebSocketClient`和`WebSocketService服务端`。`WebSocketClient`应该是客户端的实现,负责连接到服务端并进行数据交换;`WebSocketService服务端`则包含了服务端的实现,...

    Android 仿QQ客户端及服务端源码.rar

    本篇将深入探讨一个特殊的项目——“Android 仿QQ客户端及服务端源码”,通过对源码的分析,我们将了解如何构建一个类似QQ的即时通讯应用,以及涉及到的关键技术和实现原理。 首先,从项目名称我们可以推断,这是一...

    Socket实现在客户端上输入计算表达

    2. **TCP与UDP**:在Socket编程中,有两种主要的传输协议——TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供面向连接的、可靠的数据传输,而UDP则是无连接的、不可靠的数据传输。在这个案例中,由于需要保证...

    基于.net聊天室服务端和客户端

    本文将深入探讨一个基于.NET框架,利用Winform和Socket技术构建的聊天室服务端和客户端的实现过程。通过理解并实践这一项目,开发者可以掌握网络编程的基本原理和技巧,为今后的网络应用开发打下坚实基础。 首先,...

    聊天程序系统客户端服务端源代码

    总的来说,聊天程序系统客户端服务端源代码的学习涵盖了网络编程的关键概念和技术,包括winsocket的使用、客户端服务端架构的设计以及实际的数据传输流程。通过实践和研究,开发者能够深化对网络编程的理解,提升...

    聊天程序客户端服务端代码

    在提供的压缩包文件"聊天程序系统客户端服务端 (3)"中,包含了完整的客户端和服务端源代码,这将是一个宝贵的实践资源,可以帮助开发者更好地理解和掌握网络编程技术,尤其是Winsock在聊天应用中的应用。通过分析和...

    小小聊天程序代码——首次运行客户端可以向服务端发信息,不知道为什么之后相互就不能发信息了

    在这个程序中,包含了两个主要的文件:`XueLiangServer.java` 和 `XueLiangClient.java`,分别代表服务器端和客户端。初学者在尝试实现一个基本的即时通讯功能时遇到了问题,即客户端首次能向服务端发送信息,但之后...

    VB实例源文件-tcp协议传输文件(含客户端与服务器端)

    在这个VB实例源文件中,我们将深入探讨如何利用TCP协议在客户端和服务器端之间进行文件传输。 TCP协议的特点主要包括: 1. 面向连接:在数据传输前,TCP会建立一个连接,确保双方都有能力进行数据交换。 2. 可靠性...

    文件传输系统

    通过设置服务端的IP地址和端口号,客户端可以找到并连接到服务端,从而实现文件的发送与接收。 1. **文件传输的基本原理**: 文件传输涉及到数据的打包、传输和解包过程。在TCP/IP协议栈中,文件被分割成多个数据...

    安卓Android源码——基于socket通讯的文件续传!.zip

    Socket编程是网络编程的基础,它允许设备间的双向通信,是实现文件传输的理想选择。 1. **Socket基础知识** - Socket是网络上的两个进程间通信的端点,它可以理解为通信的桥梁,提供了应用层与传输层之间的接口。 ...

    c++开发的聊天软件(linux平台下的基于socket的服务端和基于QT的客户端).zip

    《C++开发的聊天软件——Linux平台下的Socket服务端与QT客户端详解》 在嵌入式Linux开发领域,网络通信是不可或缺的一部分,本项目“c++开发的聊天软件”就是一个典型的例子,它展示了如何在Linux环境下利用C++编程...

    C#TCP-IP服务器和客户端源代码.rar

    本资源"**C# TCP-IP服务器和客户端源代码.rar**"就是针对C#新手设计的一套完整示例,帮助开发者理解和实现简单的TCP/IP通信。 首先,让我们深入了解TCP/IP协议。TCP/IP由四层模型组成:应用层、传输层、网络层和...

    基于TCP协议的聊天工具服务端/客户端

    本项目“基于TCP协议的聊天工具服务端/客户端”使用了Microsoft的C++编程语言来实现一个完整的聊天应用,它涵盖了TCP连接、数据传输以及两端——服务端和客户端的基本功能。 首先,TCP协议是一种面向连接的、可靠的...

    C#服务端与客户端的聊天系统源码

    在IT领域,构建一个服务端与客户端的聊天系统是一项常见的任务,特别是在开发实时...通过深入研究源码,开发者不仅可以掌握C#编程技巧,还能了解到如何设计和实现一个完整的聊天系统,这对于提升网络编程能力大有裨益。

Global site tag (gtag.js) - Google Analytics