操作系统,windows编程,网络,socket
之前关于c/s的一篇博文只记了思路没记代码,而且表达不清晰,事后看不知所云,这个习惯要改。
这十几天学了点关于操作系统、windows编程和网络,主要看的书有以下几本,都没看完或者只看了一点,记下书名先:
《现代操作系统》
《深入解析windows操作系统》
《windows程序设计》
《c#入门经典》
《wpf编程宝典》
《图解tcp/ip》
另外《tcp/ip详解》《java网络编程》《netty权威指南》是准备接下来看的。
1.操作系统
应用程序和硬件之间的夹层,向上暴露方便编程的接口,向下管理硬件。
核心的核心:进程,地址空间和文件,这三者分别是CPU、内存、硬盘的抽象。
进程和线程都是容器,CPU在多个容器间往来穿梭,就像有多个CPU似的。

2.windows
分为用户态和内核态,重要代码运行在内核态,应用程序运行在用户态,应用程序通过调用api进行编程。具体见《深入解析windows操作系统》。
windows api编程,mfc编程,form编程,wpf编程。界面编程技术越来越多了,但学api编程还是有用,会理解底层原理。读《windows程序设计》吧。
c#跟java很像,但强大很多,像是java+语法糖一样,《c#入门经典》是入门书。
现在好像推荐wpf编程而不是使用form了,《wpf编程宝典》是为了凑单买的,好厚一本,躺着没法读。

3.网络
传输层的tcp协议和网络层的ip协议是最关键的,不过《图解tcp/ip》不像《图解http》那样简单可爱,可能是因为本来就更复杂的缘故。
还要再读读,还有最有名的《tcp/ip详解》。
虽然我java用了很久,但除了web之外的网络编程其实不多,《java网络编程》和《netty权威指南》应该读读。nio这块的课也该补一下。

4.一个demo
socket编程其实足以用来开发各种c/s程序,上次博文代码找不到了,这次重新写,刚好还学了点儿windows编程,就用wpf做个exe程序的客户端,这回真像c/s程序了。
socket处于应用层和传输层之间,提供使用tcp协议的可能性,由应用层的程序代码调用。
双向传输中的“读”这块,由于while(xx.readLine)是阻塞的,所以客户端和服务端都需要使用一个专门线程用于等待响应。
线程就像是人,传统单线程程序好比只有一个人的公司,每多一个线程就好比多一个员工,这样同一个时间可以真正同时做多件事了,尤其是阻塞这种“需要有个人傻等”的情况。CPU是大脑,而进程、线程是对CPU的抽象,多进程/线程就像多大脑,能齐头并进地处理事情,当你发现你的程序需要多个大脑,就采用多线程吧。
代码在这里,包括了java和c#的客户端,以及用java写的服务器。
java写的服务器打成可执行jar包,然后写个bat脚本,内容如下:
call java -jar myServer.jar
就能方便地启动了。
c#的程序最让我惊艳的是函数是一等对象了:
这行(doClose是个函数)
this.Closing += doClose;
和这行(doReceive是个函数)
receiveThread = new Thread(doReceive);
的写法都让人感到好舒服。
然后下面是类似android的代码,新线程想改变控件内容不能直接改,因为控件属于主线程。
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal,(ThreadStart)delegate ()
{
theLabel.Content = msg;
});
“委托”这东西我感觉就像javascript里所谓的函数字面量,或者java中的匿名内部类(用来提供方法体的)。
操作系统,windows编程,网络,socket的更多相关文章
- windows下的socket网络编程
		
windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...
 - windows下的socket网络编程(入门级)
		
windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先 ...
 - windows C++ 网络编程
		
转载:https://blog.csdn.net/yao_hou/article/details/91400832 https://blog.csdn.net/Ctrl_qun/article/li ...
 - winsock教程- windows下的socket编程(c语言实现)
		
winsock教程- windows下的socket编程(c语言实现) 使用winsock进行socket 编程 这是一个学习windows下socket编程(c语言)的快速指南.这是因为一下 ...
 - java基础-网络编程(Socket)技术选型入门之NIO技术
		
java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...
 - 网络编程(socket,套接字)
		
服务端地址不变 ip + mac 标识唯一一台机器 ip +端口 标识唯一客户端应用程序 套接字: 网络编程 网络编程 一.python提供了两个级别访问的网络服务 低级别的网络服务支持基本的 S ...
 - python 网络编程:socket(二)
		
上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall ret = send('safagsgdsegsdgew') #send 发送 ...
 - 网络编程,socket
		
1.网络编程 网络: TCP/IP 彼此之间遵守协议和规范!之间才能产生通信! IP: 每个人都有自己的身份证号! 用来标识我们网络中每一台计算机! IP地址= 网络地址 +主机地址 网络地址 :标识 ...
 - Linux高并发网络编程开发——10-Linux系统编程-第10天(网络编程基础-socket)
		
在学习Linux高并发网络编程开发总结了笔记,并分享出来.有问题请及时联系博主:Alliswell_WP,转载请注明出处. 10-Linux系统编程-第10天(网络编程基础-socket) 在学习Li ...
 
随机推荐
- 移动端a链接点击时取出背景色及边框
			
a{blr:expression(this.onFocus=this.blur())} :focus{outline:0;} /*去掉a标签的虚线框,避免出现奇怪的选中区域*/*{-webkit-ta ...
 - 北大,awk 命令基础练习
			
北大,awk 命令基础练习 Red Hat Enterprise Linux Version 5.3 Get the latest news about the world's Open Source ...
 - OC 对象和匿名对象
			
OC 对象和匿名对象 对象和匿名对象的定义: 当new出一个对象时,如果用一个指针接收这个对象,那么这个指针通常被称为对象. 如果new出的对象,不用指针接收,那么这个对象就称为匿名对象. #impo ...
 - 项目管理利器——Maven
			
假设公司要开发一个新的Web项目,使用目前流行的struts2.spring.MyBatis进行新项目开发.那么接下来首先要进行的工作就是各个框架的jar包的下载.大家通常的做法是先到struts2的 ...
 - 字符集WideCharToMultiByte
			
GDAL C#封装对中文字符转换过程中存在问题. C++封装一个Win32 DLL,采用Unicode字符集.使用标准头文件. https://msdn.microsoft.com/en-us/lib ...
 - 缩进, Tab 还是空格?(转)
			
圣战 圣战个毛线 Android 好还是 iOS 好,Windows 好还是 Mac 好,编辑器好还是 IDE好,中划线好还是下划线好…写代码这么多年,会遇到很多奇葩的毫无意义的所谓脑残粉的争论 昨天 ...
 - SQL注入攻击之关键字检测
			
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的学习是避免被 ...
 - PostgreSQL中美元符号引用的字符串常量
			
虽然用于指定字符串常量的标准语法通常都很方便,但是当字符串中包含了很多单引号或反斜线时很难理解它,因为每一个都需要被双写.要在这种情形下允许可读性更好的查询,PostgreSQL提供了另一种被称为“美 ...
 - 求树的重心(POJ1655)
			
题意:给出一颗n(n<=2000)个结点的树,删除其中的一个结点,会形成一棵树,或者多棵树,定义删除任意一个结点的平衡度为最大的那棵树的结点个数,问删除哪个结点后,可以让平衡度最小,即求树的重心 ...
 - nyist 604 小明的难题
			
http://acm.nyist.net/JudgeOnline/problem.php?pid=604 小明的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 ...