Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#有没有一种简单的方法可以进入TCP套接字编程?_C#_.net_Sockets - Fatal编程技术网

C#有没有一种简单的方法可以进入TCP套接字编程?

C#有没有一种简单的方法可以进入TCP套接字编程?,c#,.net,sockets,C#,.net,Sockets,我曾经做过一个程序,它使用数据库将小消息从一台电脑发送到另一台电脑。我所做的是把数据库放在一个共享文件夹中,让另一台电脑上的程序连接到它(通过一个路径,不少于),这是一个简单易行的方法,可以在网络上的电脑之间传递信息。这不是最好的选择,但这只是家庭作业,快速而肮脏的方法给了我一个分数 但是现在家庭作业已经完成了,我想在我所做的基础上有所改进。程序的问题在部署阶段。有太多的文件夹/安装路径和管理/共享问题,涉及直接路径到共享文件夹上的数据库 所以stackoverflow的好人建议我试试Socke

我曾经做过一个程序,它使用数据库将小消息从一台电脑发送到另一台电脑。我所做的是把数据库放在一个共享文件夹中,让另一台电脑上的程序连接到它(通过一个路径,不少于),这是一个简单易行的方法,可以在网络上的电脑之间传递信息。这不是最好的选择,但这只是家庭作业,快速而肮脏的方法给了我一个分数

但是现在家庭作业已经完成了,我想在我所做的基础上有所改进。程序的问题在部署阶段。有太多的文件夹/安装路径和管理/共享问题,涉及直接路径到共享文件夹上的数据库

所以stackoverflow的好人建议我试试Socket编程,我觉得这有点不适合我。但你永远不知道

另外,我知道同步和异步套接字编程之间的区别。一个街区,另一个没有。我正在做的程序是一个简单的回合制游戏,所以我认为同步可能足够好,因为如果不是轮到你,你真的什么都做不了。然而,问题是该程序被视为“无响应”。我尝试过异步,但遇到线程问题,我认为这不是我的主意。 从逻辑上讲,这个程序很简单。一台主机,一台客户端。在客户端连接时,主机发送数据。然后客户端接收、发送自己的数据。以此类推,直到一个玩家输

很抱歉,我的学校只安装了.NET2.0。没有WCF什么的。而且,它必须在C#Windows窗体中完成,因此XNA已退出

所以,我想问。。。有没有一种简单的方法可以进入Socket编程?是否有任何指南/示例项目可以提供帮助?可以研究和修改的预制代码


我发现并改编的大多数示例都是聊天应用程序,我认为这已经足够好了,但将其模块化只会破坏它。

我创建了一些类,可以使用
二进制格式化程序通过套接字传输对象

下面是我的
BinaryTransport
类的一些测试:

实际类别:


请注意,我是很久以前写的。我只是注意到一些小虫子。但是,要么使用它们,要么只是学习课程来了解更多

您遇到的聊天应用程序示例应该足够了。我不清楚你所说的“模块化”

您需要的是设计一个通过连接发送的协议,可以说是一个规则协议,以便一方知道另一方在谈论什么。因此,您可以发送以下内容,而不是发送纯文本(聊天):

0x03(消息长度)
0x0A(此虚构协议中的移动命令)
0x02(命令的参数1,在本例中为X坐标,在协议设计中定义)
0x05(命令的参数2,在本例中为Y坐标,在协议设计中定义)


现在完全取决于您在接收和解释数据后会发生什么。就我个人而言,我会选择异步解决方案,因为它让您的程序去做其他事情(图形?)。根据我的经验,它在代码上更容易适应。

我记得当我开始使用C#中的套接字通信时,我尝试在客户端和服务器之间,然后在多个客户端之间实现一个简单的聊天程序。以下是我当时正在阅读的教程:

如果你想要完整的代码,我可以上传我的最终项目,你可以研究代码。它还使用多线程,因此您可以看到如何在GUI应用程序中处理这种情况


旁注:哇,这个数据库的想法是我在PC到PC通信方面见过的最疯狂的事情。干得好

一个有趣、有用且简单的练习是创建一个基于TCP的记录器,你可以学习Socket(C#使之更容易)

在开发过程中,每一个程序员都需要一种方法来知道在某些点上幕后发生了什么。如果没有记录器,您通常会编写以下内容:

Console.WriteLine( "blah" );
这将导致一个无趣、未过滤、无组织的字符串被抛出到输出窗口

我使用套接字非常轻松地创建了一个基于TCP的记录器。一方面,您有一个单独的Winforms应用程序(服务器),它负责侦听传入的消息并在富内容控件上漂亮地显示它们。另一方面,您编写了一个非常简单的类(客户端),其中包含一个函数,如:

public static class MyConsole
{
    public static void WriteLine( string message, string whatever )
    {
        // send to the net
        if( mTcpSocket.Connected )
            mTcpSocket.Send( message );

        // in case the server is not there we still have regular output
        Console.WriteLine( message );
    }
}

我曾经创建过这个记录器,从那以后一直在使用它。此外,考虑到它的tcp特性,在服务器端做了一些小改动,我已经成功地从不同的语言(如C#和Java)使用了它,现在可以从ActionScript中使用它。

阅读名称空间的文档。如果您正在努力解决线程签出BackgroundWorker类的复杂性,它可以简化一些事情。您可以考虑另一个选项:非阻塞套接字,它允许您轮询“当前线程”上的传入数据。这可能会花费一点性能,但我怀疑任何玩家都不会注意到。你们学校只有.NET2.0吗?我讨厌看到学校不让学生为外面的事情做好准备……+1感谢他们回来学习如何以一种不那么“疯狂”的方式做这件事!抱歉,我没有清除“模块化”部分。我觉得时间太长了。看,我研究和改编的聊天应用程序使用异步,我相信。我能理解。这相对简单。但是,我的程序在发送字符串之前和接收字符串之后调用几个函数,这些函数根据接收到的字符串应用GUI更改,并根据GUI上按下的内容修改要发送的字符串。这就是程序(主要是线程)失败的地方。因此,您需要控制接收消息的时间。这可以通过实现类消息的队列来实现,其中消息包含数据i