疯狂飞艇

当前位置:疯狂飞艇 > IT教程

socket网络编程

时间:2021-01-16 23:03:10来源:金橙教程网 作者:admin8 阅读:51次
 

socket网络编程

socket网络编程

1.1 socket网络编程简介

在这里插入图片描述

1.2 Socket的相关概念

在这里插入图片描述

1.3 Socket的端口介绍

在这里插入图片描述

2.1 Socket通讯流程图

在这里插入图片描述

3.1 局域网和以太网的区别

首先,我们来看看局域网是什么,简单的说局域网就是在一个封闭的环境如办公楼中彼此连接起来的一组计算机。这个定义中的关键在于所有的计算机都以一定的形式在网络中进行组织和彼此连接,而且要在同一幢建筑物中。所以只要这两台计算机在同一个建筑物中并且相互连接,那么我们就可以说这两台计算机组成了一个局域网。

我们来看看IEEE的802.3n标准中对以太网标准的有关表述:使用逻辑总线型拓扑和载波侦听多路访问/冲突监测(CDSMA/CD)的差错监测和恢复技术的网络形式。这就是以太网的定义了。从这里我们可以知道以太网实际上是局域网的一种形式。

3.2 以太网共享文件的方式

局域网设置共享详细流程

局域网同享设置其实十分的简略,XP与win98,XP与XP,XP与win7选用下列办法都能设置成功局域网同享设置具体过程图文分化:

方法/步骤:

1、右键点击“我的电脑

2、选择属性,选择“计算机名”点击“更改”,如下图所示“要重新命名此计算机或加入域,单击更改”

3、在弹出菜单的最下方,将局域网内需要实现共享的计算机“工作组”统一命名,如:WorkGroup或ERP,注意:想要实现共享,局域网中所有的计算机都必须是同一个工作组!

4、右键点击“网上邻居”,选择“属性”按钮

5、右键点击“本地连接”,选择“属性”

6、在弹出“本地连接属性”菜单中找到“此链接使用下列项目”,双击“Internet 协议TCP/IP)”

7、选中“使用下面的ip疯狂飞艇”,将IP疯狂飞艇设置为:192.168.1.2(同处于局域网中的计算机可以依此类推:192.168.1.3~192.168.1.N),子网掩码设置为:255.255.255.0,默认网关设置:使用路由器网关192.168.1.1或你设置的其他网管疯狂飞艇。接下来勾选“使用下面的DNS服务器疯狂飞艇”,将首选NDS服务器设置为:192.168.1.1,备用DNS服务器设置为空(不用管它),点击“确定”;以上步骤设置完毕,请重启计算机

8、验证局域网ip疯狂飞艇和工作组设置是否成功,双击“网上邻居”,点击“查看工作组计算机”,您应该能够看到处于同一工作组的其他计算机了,这说明设置成功。

9、双击“我的电脑”,在您需要共享的硬盘盘符上点击右键,选择“共享与安全”

10、在弹出菜单中选择“共享”,点击“如果您知道风险,但还要共享驱动器的根目录,请单击此处”

11、点击“如果您知道在安全方面的风险,但又不想运行向导就共享文件,请单击此处”

12、选择“只启用文件共享”,点击“确定”

13、在弹出菜单中,勾选“在网络上共享这个文件夹”,共享名可以任意更改成您想要的名字,同时如果您需要局域网中的其他计算机更改您的文件请将“允许网络用户更改我的文件”,否则该共享盘符或文件夹为“只读状态”,假如您需要共享的仅仅是某个盘符下的文件夹,方法与盘符共享相同,最后点击“确定”

14、到此,局域网共享设置完成,处于同一局域网中的计算机可以通过“网上邻居”查看到您共享的盘符或文件夹了

4 程序代码

4.1 问题一

在这里插入图片描述

解决方法:在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,这个时候如果你想要访问窗口的控件,那么你可以将窗口构造函数中的CheckForIllegalCrossThreadCalls设置为false.这是线程就能安全的访问窗体控件了。

在这里插入图片描述

4.2 问题二

VS运行两个项目时应该先运行一个,右键,调试,启动新实例;

在这里插入图片描述

4.3 Server端用来监听和接受数据
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.DATa;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.text;
using System.Threading;
using System.Threading.Tasks;
using System.windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }
        //相关变量定义
        Dictionary<String, Socket> dicSocket = new Dictionary<string, Socket>();
        private void btnListern_Click(object sender, EventArgs e)
        {
            Socket socketWatch = new Socket(AddressFamily.Internetwork,Sockettype.Stream,ProtocolType.Tcp);
            //设置指定的端口号和服务的ip疯狂飞艇
            Ipaddress ip = IPAddress.Any;//调用任意端口号
            //ipaddress ip = ipaddress.parse(txtLicent.text);//调用唯一端口号
            IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPoint.Text));

            //绑定IPEndPoint
            socketWatch.Bind(point);
            ShowMsg("监听成功");

            //设置监听10个客户端服务器
            socketWatch.Listen(20);
            //Socket socketsend = socketWatch.Accept();创建线程不然一直处于这里等待
            //ShowMsg(socketsend.RemoteEndPoint.ToString() + ":" + "连接成功!");
            //创建线程用来监听;
            //线程创建方法:
            Thread th = new Thread(Listen);
            th.IsBackground = true;
            th.Start(socketWatch);//Start里面参数是线程方法参数
        }
        void ShowMsg(string str)
        {
            txtLog.AppendText( str + "\r\n");//追加文本
           // txtLog.Text = str + "\r\n";区别与上一行
        }

        void Listen(Object o)//线程没有死,可以用线程解决
        {
            Socket socketWatch = o as Socket;
            while (true)
            {
                Socket socketSend = socketWatch.Accept();
                dicSocket.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
                ShowMsg(socketSend.RemoteEndPoint.ToString()+"连接成功!");

                //开启一个新线程,不停地接受客户端发送的新消息
                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start(socketSend);
            }
           
        }
        void Recive(object o)//再加一线程目的, 因为只接受数据一次后有等待连接
        {
            while (true)
            {
                Socket socketSend = (Socket)o;
                //实际接受的有用数据
                byte[] buffer = new byte[1024 * 1024 * 2];
                int i = socketSend.Receive(buffer);
                string str = Encoding.UTF8.GetString(buffer, 0, i);
                ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + str);
            }

        }

    }
}

4.4 客户端发送消息程代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }
        //相关变量定义
        Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
        private void btnListern_Click(object sender, EventArgs e)
        {
            Socket socketWatch = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            //设置指定的端口号和服务的ip疯狂飞艇
            IPAddress ip = IPAddress.Any;//调用任意端口号
            //ipaddress ip = ipaddress.parse(txtLicent.text);//调用唯一端口号
            IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPoint.Text));

            //绑定IPEndPoint
            socketWatch.Bind(point);
            ShowMsg("监听成功");

            //设置监听10个客户端服务器
            socketWatch.Listen(20);
            //Socket socketsend = socketWatch.Accept();创建线程不然一直处于这里等待
            //ShowMsg(socketsend.RemoteEndPoint.ToString() + ":" + "连接成功!");
            //创建线程用来监听;
            //线程创建方法:
            Thread th = new Thread(Listen);
            th.IsBackground = true;
            th.Start(socketWatch);//Start里面参数是线程方法参数



        }
        void ShowMsg(string str)
        {
            txtLog.AppendText( str + "\r\n");//追加文本
           // txtLog.Text = str + "\r\n";区别与上一行
        }

        void Listen(Object o)//线程没有死,可以用线程解决
        {
            Socket socketWatch = o as Socket;
            while (true)
            {
                Socket socketSend = socketWatch.Accept();
                dicSocket.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
                ShowMsg(socketSend.RemoteEndPoint.ToString()+"连接成功!");

                //开启一个新线程,不停地接受客户端发送的新消息
                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start(socketSend);
            }
           
        }
        void Recive(object o)//再加一线程目的, 因为只接受数据一次后有等待连接
        {
            while (true)
            {
                Socket socketSend = (Socket)o;
                //实际接受的有用数据
                byte[] buffer = new byte[1024 * 1024 * 2];
                int i = socketSend.Receive(buffer);
                string str = Encoding.UTF8.GetString(buffer, 0, i);
                ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + str);
            }

        }

    }
}

4.5 传输协议

在这里插入图片描述

相关阅读

添加网络打印机,教您如何添加网络打印机

打印机是办公不可缺少的一部分,然后安装了系统的用户的用户,很多人虽然知道打印机要添加电脑才能使用,但是却不知道怎么添加,其实在下

Unix环境高级编程——学习笔记

第七章 进程环境 引言 main函数是如何被调用的?命令行参数是如何传送给执行程序的?典型的存储器布局是什么样式?如何分配另外的存

[读书笔记]编程之美(一)

[读书笔记]编程之美(一) 不得不说编程之美是一本很有意思的书,里面的各式各样新奇的问题,总是可以通过课上讲的简单的问题来解决,对

找不到无线网络,教您找不到无线网络的处理方法

现在很多朋友使用的都是笔记本电脑,很多使用笔记本电脑的朋友采用的都是无线网络上网的方式进行上网的,那么遇到找不到无线网络这问

网络连接图标不见了,小编告诉你网络连接图标不见了怎

我们都知道电脑的右下角有很多的快捷键,在我们使用的时候可以很方便的使用到。打开电脑,桌面的网络图标不见了,进入网上邻居查看同事

分享到:

IT相关

程序相关

推荐文章

热门文章

疯狂飞艇官网疯狂飞艇网址疯狂飞艇平台疯狂飞艇app疯狂飞艇下载