Socket简单学习之Tcp通信

Socket网络通信的简单学习

建立Tcp通信

服务器端
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace TcpSocket
{
    //服务器端
    class Program
    {
        static void Main(string[] args)
        {

            Socket tcpSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//建立一个socket对象,用来网络通信
            IPAddress ipaddress = new IPAddress(new byte[] { 192, 168, 43, 92 });//配置服务器的IP
            EndPoint point = new IPEndPoint(ipaddress, 5566);//配置服务器的IP和端口
            tcpSocket.Bind(point);//服务器的这个ip和端口用来接受客户端的数据
            tcpSocket.Listen(100);//设置服务器能连接的客户端的数量
            Socket client = tcpSocket.Accept();//等待客户端来连接,将客户端的连接对象存在Client对象中,没有对象连接就一直等待不执行下面代码
            byte[] date = new byte[1024];//定义一个二进制数组来存放客户端发送的数据
            int length = client.Receive(date);//接受从客户端发送的二进制数据
            string str = Encoding.UTF8.GetString(date, 0, length);//将二进制数据转化为字符串
            Console.WriteLine(str);//显示出从客户端发送的数据
            string message = "客户端已近连接服务器端了";
            byte[] date1 = Encoding.UTF8.GetBytes(message);
            client.Send(date1);//把信息从服务器端传到客户端
            while (true)//循环接收从客户端发送的数据,显示出来,并向客户端发送数据
            {
                byte[] date2 = new byte[1024];//存放二进制的数据
                int length2 = client.Receive(date2);//接受从客户端发送的二进制数据
                string str1 = Encoding.UTF8.GetString(date2, 0, length);//将二进制数据转化为字符串
                Console.WriteLine("客户端发送的数据为:"+str1);

                byte[] date3 = Encoding.UTF8.GetBytes(str1);
                client.Send(date3);//把信息从服务器端传到客户端
            }
            Console.ReadKey();

        }
    }
}

步骤:

1:声明Socket对象,利用构造函数给Socket对象传值,AddressFamily设置为局域网InterNetwork,socketType接受数据的类型设置为stream流,ProtocalType传输方式设置为Tcp可靠传输

  Socket tcpSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//建立一个socket对象,用来网络通信

Socket的命名空间为using System.Net.Sockets;

2:利用Bind()方法给服务器端绑定服务器的IP和端口用来接收数据

Ipaddress 和EndPoint的命名空间为using System.Net

先将ip和端口绑定到EndPoint对象上

IpAddress address=new IpAddress(new char[]{IP地址})//绑定ip地址

EndPoint point=new IPEndPoint(address,端口号)//绑定ip地址和端口

tcpSocket.bind(point)//给服务器端绑定服务器的ip和端口号

 IPAddress ipaddress = new IPAddress(new byte[] { 192, 168, 43, 92 });//配置服务器的IP
            EndPoint point = new IPEndPoint(ipaddress, 5566);//配置服务器的IP和端口
            tcpSocket.Bind(point);//服务器的这个ip和端口用来接受客户端的数据

IpAddress address=new IpAddress(new char[]{IP地址})替换为

  IPAddress ip = IPAddress.Parse("192.168.43.92");

IpAddress address=new IpAddress(new char[]{IP地址})//绑定ip地址

EndPoint point=new IPEndPoint(address,端口号)//绑定ip地址和端口

合并成一段

EndPoint point=new IpEndPoint(IPAddress.parse("IP"),端口号);

3:利用Listen()方法设置服务器最大连接的客户端的数目

  tcpSocket.Listen(100);//设置服务器能连接的客户端的数量

4:利用accept()方法接受连接服务器的客户端的socket对象,只有接收到了客户端的对象代码才会继续往下执行

 Socket client = tcpSocket.Accept();//等待客户端来连接,将客户端的连接对象存在Client对象中,没有对象连接就一直等待不执行下面代码

5:利用Send()方法向客户端发送数据,因为设置是以流的形式传输数据,所以数据要转化成二进制字节

            string message = "客户端已近连接服务器端了";
            byte[] date1 = Encoding.UTF8.GetBytes(message);
            client.Send(date1);//把信息从服务器端传到客户端

6:利用Receive()方法接收从客户端发送过来的数据,接收的数据是二进制的

                byte[] date2 = new byte[1024];//存放二进制的数据
                int length2 = client.Receive(date2);//接受从客户端发送的二进制数据
                string str1 = Encoding.UTF8.GetString(date2, 0, length);//将二进制数据转化为字符串

客户端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace TcpSocketClient
{
    //客户端
    class Program
    {
        static void Main(string[] args)
        {
            Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立一个socket对象,用来网络通信
            IPAddress ipAdress = new IPAddress(new byte[] { 192, 168, 43, 92 });//配置服务器的IP
            EndPoint point = new IPEndPoint(ipAdress, 5566);//配置服务器的IP和端口
            tcpSocket.Connect(point);//把客户端与服务器端建立连接
            string str = "客户端请求与服务器建立连接";
            byte[] ClientDate = Encoding.UTF8.GetBytes(str);//将要发送的数据转化为二进制
            tcpSocket.Send(ClientDate);//向服务器发送二进制数据
            byte[] date = new byte[1024];//定义一个二进制数组来存放服务器端返回的数据
            int length = tcpSocket.Receive(date);//接收从服务器端接收的数据
            string message = Encoding.UTF8.GetString(date, 0, length);//将接收到的二进制数据转化为字符串
            Console.WriteLine(message);
            while(true)//循环的从客户端发送数据到服务器端,在接收从服务器端接收的数据
            {
                string str1 = Console.ReadLine();//写入向服务器端发送的数据
                byte[] ClientDate1 = Encoding.UTF8.GetBytes(str1);//将要发送的数据转化为二进制
                tcpSocket.Send(ClientDate1);//向服务器发送二进制数据
                byte[] date1 = new byte[1024];//定义一个二进制数组来存放服务器端返回的数据
                int length1 = tcpSocket.Receive(date1);//接收从服务器端接收的数据
                string message1 = Encoding.UTF8.GetString(date1, 0, length1);//将接收到的二进制数据转化为字符串
                Console.WriteLine("从服务器端接收到的数据为:"+message1);
            }
            Console.ReadKey();
        }
    }
}

1:声明Socket对象

   Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立一个socket对象,用来网络通信

2:绑定接收端的ip和端口,Socket先用IP找到服务器的地址,再通过端口向服务器传输数据

 IPAddress ipAdress = new IPAddress(new byte[] { 192, 168, 43, 92 });//配置服务器的IP
            EndPoint point = new IPEndPoint(ipAdress, 5566);//配置服务器的IP和端口

3:利用Connect()方法去连接服务器端

tcpSocket.Connect(point);//把客户端与服务器端建立连接

4:利用Send()向服务器端发送数据

string str1 = Console.ReadLine();//写入向服务器端发送的数据
                byte[] ClientDate1 = Encoding.UTF8.GetBytes(str1);//将要发送的数据转化为二进制
                tcpSocket.Send(ClientDate1);//向服务器发送二进制数据

5:利用Receive()方法接收服务器端的数据

                byte[] date1 = new byte[1024];//定义一个二进制数组来存放服务器端返回的数据
                int length1 = tcpSocket.Receive(date1);//接收从服务器端接收的数据
                string message1 = Encoding.UTF8.GetString(date1, 0, length1);//将接收到的二进制数据转化为字符串
                Console.WriteLine("从服务器端接收到的数据为:"+message1);

我们可以使用Tcplistener类来代替socket类实现Tcp通信的服务器端的监听功能

Tcplistener的命名空间为using System.Net.Sockets

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace tcpClient
{
    //服务器端
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("192.168.43.92"), 5566));//设置好服务器的Ip和端口号
            listener.Start();//开始监听客户端的连接
            TcpClient client = listener.AcceptTcpClient();//获取连接服务器的客户端,获取到客户端后才执行下面的代码,一个AcceptTcpClient只能允许一个客户端连接
            NetworkStream stream = client.GetStream();//用网络流来传输二进制数据
            byte[] date = new byte[1024];
            int length = stream.Read(date, 0, 1024);//读取网络流中的二进制数据,放入date二进制数组中,从date下标为0开始放,一次放1024个字节,网络流中数据不足1024就按实际情况放
            string str = Encoding.UTF8.GetString(date, 0, date.Length);
            Console.WriteLine(str);//打印出客户端传入的数据
            string str1 = "已连接服务器端";
            byte[] date1 = Encoding.UTF8.GetBytes(str1);
            stream.Write(date1,0,date1.Length);//从服务器端返回数据到客户端
            stream.Close();//关闭网络流
            client.Close();//关闭客户端
            Console.ReadKey();
        }
    }
}

1:利用TcpListener对象设置好服务器的ip地址和端口号

TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("192.168.43.92"), 5566));//设置好服务器的Ip和端口号

2:TcpListener.start()开始监听客户端的连接

  listener.Start();//开始监听客户端的连接

3:AcceptTcpClient()方法获取连接服务器的客户端

 TcpClient client = listener.AcceptTcpClient();//获取连接服务器的客户端,获取到客户端后才执行下面的代码,一个AcceptTcpClient只能允许一个客户端连接

4:利用NetWorkStream网络流来传输数据

  NetworkStream stream = client.GetStream();//用网络流来传输二进制数据

5:stream.read()从网络流中读取传入的二进制字节

 byte[] date = new byte[1024];
            int length = stream.Read(date, 0, 1024);//读取网络流中的二进制数据,放入date二进制数组中,从date下标为0开始放,一次放1024个字节,网络流中数据不足1024就按实际情况放
            string str = Encoding.UTF8.GetString(date, 0, date.Length);

6:stream.write()向网络流中写入数据,用read方法去读取写入的二进制字节

            string str1 = "已连接服务器端";
            byte[] date1 = Encoding.UTF8.GetBytes(str1);
            stream.Write(date1,0,date1.Length);//从服务器端返回数据到客户端

7:stream.close()关闭网络流 client.close()关闭客户端对象

stream.Close();//关闭网络流
            client.Close();//关闭客户端

我们可以使用Tcpclient类来代替socket类实现Tcp通信的服务器端的监听功能

Tcpclient的命名空间为using System.Net.Sockets

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace TcpStudy
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpClient client = new TcpClient("192.168.43.92", 5566);//设置客户端要发送数据到服务器的地址和端口
            NetworkStream stream = client.GetStream();//设置网络流进行数据交换
            string str = "客户端请求连接服务器";//客户端的发送数据
            byte[] date = Encoding.UTF8.GetBytes(str);//转化为二进制
            stream.Write(date, 0, date.Length);//向服务器端发送数据
            byte[] date1 = new byte[1024];
            int length = stream.Read(date1, 0, 1024);
            string str1 = Encoding.UTF8.GetString(date1,0,length);//接收服务器端发送的数据
            Console.WriteLine(str1);            stream.close();            Client.close();
            Console.ReadKey();
        }
    }
}

1:建立TcpClient对象,绑定数据发送到服务器的地址和端口

TcpClient client = new TcpClient("192.168.43.92", 5566);//设置客户端要发送数据到服务器的地址和端口

2:建立网络流传输数据   getStream()

 NetworkStream stream = client.GetStream();//设置网络流进行数据交换

3:从网络流中读取数据

byte[] date1 = new byte[1024];
            int length = stream.Read(date1, 0, 1024);

4:向网络流中发送数据

 string str = "客户端请求连接服务器";//客户端的发送数据
            byte[] date = Encoding.UTF8.GetBytes(str);//转化为二进制
            stream.Write(date, 0, date.Length);//向服务器端发送数据

5:关闭网络流和客户端的连接

stream.close();
            Client.close();

原文地址:https://www.cnblogs.com/zhangyang4674/p/11406407.html

时间: 2024-08-29 14:17:08

Socket简单学习之Tcp通信的相关文章

java socket初步学习一 ( tcp)

Java socket通信程序: 第一版本: 实现功能: 服务器地址:127.0.0.1  端口:5050 客户机:端口5050 客户端发送字符:“t” 服务器接收到该字符并回复:“r” 流程: 建立java工程,默认在workspace中,udpServer为工程名,此时work/udpServer文件夹 建立类名为server,则此时服务器代码为: package udpServer; import java.io.*; import java.net.*; public class ser

[转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计socket编程就已经基本入门了. 建议:1) 多多查查所用到的网络接口; 2) 最好有一本书,如UNIX环境高级编程,UNIX网络编程,可查询:3) 可以直接使用书上的例子更好. http://blog.csdn.net/zhenjing/article/details/4770490 TCP C

Python网络编程02/基于TCP协议的socket简单的通信

目录 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 2.socket 2.1 socket套接字 2.2 基于TCP协议的socket简单通信 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 1.单播:单独联系某一个人 2.广播:给所有人发送消息(群发) 3.比特流:bit就是0101跟水流一样的源源不断的发送01010101 4.以太网协议:将数据进行分组:一组称之为一帧,数据报 head|data head:18字节:

【转】Qt Socket简单通信

最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信. 1.UDP通信 UDP没有特定的server端和client端,简单来说就是向特定的ip发送报文,因此我把它分为发送端和接收端. 注意:在.pro文件中要添加QT += network,否则无法使用Qt的网络功能. 1.1.UDP发送端 #include <QtNetwork> QUdpSocket *sender; sender = new QU

linux 网络编程之最简单的tcp通信服务端

编写一个最为简单的tcp通信服务端.代码如下: #include <iostream> #include <cstring> using namespace std; #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <uni

(转)C# Socket简单例子(服务器与客户端通信)

本文转载自:http://blog.csdn.net/andrew_wx/article/details/6629721 这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消息边界问题.端口号是否被占用.消息命令的解析问题等.. 下面是两个程序的代码,(两个程序均为控制台程序) 先发服务端的(Server)完整代码如下: 引入命名空间: [cshar

linux 网络编程之最简单的tcp通信客户端

编写一个最为简单的tcp通信客户端.代码如下: #include <iostream> #include <cstring> using namespace std; #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <netinet/in.h> #include <errno.h> int main() { /*创

Java学习---TCP Socket的学习

基础知识 1. TCP协议 TCP是一种面向连接的.可靠的.基于字节流的运输层(Transport layer)通信协议.在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议. TCP所提供服务的主要特点:面向连接的传输:端到端的通信:高可靠性,确保传输数据的正确性,不出现丢失或乱序:全双工方式传输:采用字节流方式,即以字节为单位传输字节序列:紧急数据传送功能 TCP支持的服务:文件传送File Transfer:远程登录Remote login:

Java 通过实现简单的TCP通信程序来理解TCP通信

概述 TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server). 两端通信的步骤 服务端程序,需要事先启动,等待客户端的连接. 客户端主动连接服务器端,连接成功才能通信.服务端不可以主动连接客户端. 在Java中,提供了两个类用于实现TCP通信程序: 客户端:java.net.Socket类表示.创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信. 服务端:java.net.ServerSocket类表示.创建