当前位置:C++技术网 > 资讯 > 请教socket和多线程的经验

请教socket和多线程的经验

更新时间:2017-07-21 22:44:27浏览次数:1+次

关于socket之前学过一些TCP/IP,跟着教程写出了基于C/S模型的控制台程序,实现过程也了解,但是好像不知道怎么进展下去了……还有如何连接服务器实现外网通讯? 关于多线程,目前只学了,创建线程,分离,互斥一些基础的,怎么进阶呢? 谢谢

C++技术网会员解答:

    您好,感谢您对C++技术网的支持与信任。

    既然你说学过socket编程,但是却不知道连接服务器实现外网通信。这个问题其实就是一个伪命题。难道你写的socket程序只能用于内网通信吗?不是的。我认为,是你对socket的理解不到位。下面给你解释一下,帮助你理解。

    socket编程就是实现去实现TCP等通信的。不管基于什么架构,都是基于网络通信的。网络通信并无内网外网之说,只是网段划分不同而已。而socket编程,并没有限制通信的范围。你缩写的socket程序,本身就具备外网通信。只是你都是在本机完成了通信而已,没有做外网通信而已。那么外网又是什么概念呢?你可以将外网比作局域网,你只要让你的程序在局域网的两台电脑上运行相互通信就可以了。要体现这个效果,你写一个客户端,一个服务器端,然后放在局域网的两个电脑运行,相互聊天,你会感受到网络通信的魅力的。其实本身在本机使用127.0.0.1通信,就是基于网络的通信,只不过是特殊的网络而已,是本机的网络回环,而通信模式和局域网以及外网都是一样的。

    以上是你对socket通信存在不理解,所以加以说明。而你说不知道如何进一步学习socket编程,我在此给你一些建议。

    socket通信有好几种模式,分别有阻塞式和非阻塞式(同步和异步)、轮询式或事件机制。然后组合使用,比如异步事件机制,可以实现高效大并发的通信。而阻塞方式则是效率非常低下的方式。我们一般在开始学习socket编程的时候,也就尝试了阻塞式和非阻塞式,即同步和异步的两种方式。如果你不知道这些概念,那么你就需要好好的从理论开始学习了,不只是写代码,先要学习socket编程的基本模式。而这些模式又基本上是不变的了,学懂理论,再熟悉编程的实现方法。在实际开发的时候,根据需要做部分的改进或者性能提升。

    当然,要想很好的理解socket通信,你需要学习《计算机网络》通信课程,否则网络这些基础理论你就不懂了。比如你不知道握手是什么,那么编程时你就不知道你在做什么。而socket编程,一般有Windows方式和unix形式,你可找相关的书,好好学习一遍,把几种socket编程模式都掌握了。在Windows中,最高性能的是完成端口,在Linux时Epoll。

    对于多线程编程的学习,你学习了基本的线程控制使用。多线程编程最麻烦的地方不是线程进程的创建这些,而是进程线程同步问题,避免死锁,另外还有进程间通信。这些才是多线程的核心。这也是你要重点学习的。这些编程的实现如果掌握了,要再进阶,那就是把《操作系统》的进程管理章节再研读几遍,深刻理解进程的理论和运行机制。再学习进程调度这些内容。

    这些内容,只要你找到了开始,后续你就知道一步步该学习什么了。记住,这些内容,需要看书哦,不是网上随便找几篇文章看就行的。这些都是基础的基础,很重要,需要静下心学习,好好写代码验证。你可以在【网站的用户中心】的电子书资源里找到对应的书学习。对于每一部分的内容,请动手写代码核实,代码写出来了,才说明你掌握了。看完一遍是没有用的。

    学习过程中如果还有问题,可以继续提问。加油。