您的位置:首页 > 运维架构 > Linux

windows(win8)和linux(CentOS)的socket小程序演示和错误解决

2016-01-01 17:00 621 查看
这篇博文很小白,主要是为了帮助自己熟悉一些流程和记录一些小bug,希望也能帮到跟我一样刚刚起步的新人。。。

1.笔记本上的socket的小程序演示

1.1编写自己的服务器和客户端小程序(python版)

这里的服务器小程序参考了Python基础教程(第2版)第243页的代码清单14-1



对应的客户端小程序是代码清单14-2:



我用的是eclipse,eclipse和pydev搭建python开发环境你可以参考这里:/article/4621354.html

先运行服务器小程序,再运行客户端小程序。

运行服务器小程序时包如下错误:



原来是包名冲突:



因为我引用了socket模块,而我程序所在的包名也叫socket,把程序所在包名换个名字就OK了。

成功运行的话,服务端程序的控制台会输出如下:



客户端程序会输出(客户端可运行多次):



注意:本程序中笔记本既充当了服务器,又充当了客户端

1.2查看服务器程序所用端口1234的状态

右键win键,选择“命令提示符(管理员)”,进入如下界面:



因为我们的服务器小程序使用了端口1234,我们用netstat
–aon|findstr1234查看一下该端口的状态:



这个端口现在由pid为4512的进程占用,再查看这个是否就是由我们写的python小程序:



确实是被我们写的python小服务器程序所占用。

现在eclipse里运行客户端小程序(确保服务器小程序正在运行),看一下1234端口的状态变化



我运行了3次客户机小程序,便多了3条上面的连接状态信息,TIME_WAIT表示这个套接字已经关闭,正在等待远程套接字的关闭传送。其他状态的意思如下:



在这里我们补充一点TCP连接的知识:当一台机器(客户端)企图跟一台提供服务的机器(服务器)建立TCP连接时,他们必须先按次序交换通讯好几次,这样TCP连接才能建立起来,我们称之为三次握手。开始客户端会发送一个带SYN标记的包到服务端;服务端收到这样的带SYN标记的包后,会发送一个带SYN-ACK标记的包到客户端作为确认;当客户端收到服务端这个带SYN-ACK标记的包后,会向服务端发送一个带ACK标记的包。完成这个三次握手的步骤,他们的TCP连接就建立起来了,可以进行数据通讯。

想了解更多关于tcp连接的资料,可参考如下链接:

/article/5196732.html

/article/1777486.html

http://www.2cto.com/net/201209/157585.html

2.CentOS上的socket的小程序演示

2.1实验简述

我有两台服务器gb33, gb44,在gb33上运行服务器小程序,在gb34上运行客户端小程序,两台机器均是CentOS6.7

2.2运行服务器端代码

与上面同样的服务端小程序放在我的gb33上,名字为code14_1_server.py



直接执行python code14_1_server.py或者用chmod a+x code14_1_server.py为该代码添加可执行权限,然后./code14_1_server.py也可以执行该程序。

我的当时出现这个错误:



因为代码里使用了

port = 1234

serverAddr = (host, port)

s.bind(serverAddr)

服务器的主机名字获得失败,发现ping 主机名也不通



方法1:直接写服务器的ip地址:serverAddr
= (('x.x.x.33', port))

方法2:为了方便用名字通信,做以下配置:



加上你的主机的ip与主机名的映射(在所有需要互相按名字访问的机器上)



这样也可以使得主机们之间能用主机名互相ping通(所有的主机都得配置,包括gb34)



再次执行服务器小程序,不再报错:



2.3运行客户端代码

在gb34上执行客户端小程序,客户端小程序唯一的变动就是要改获取服务器主机名的代码,因为现在服务器和客户端不是在同一机器上了,服务端要改成真正的服务器主机,在这里gb33是服务器。



运行客户端小程序,:python code14_1_client.py,报如下错误:



因为没有关闭服务器端的iptables



再次运行客户端小程序:

gb34客户端输出:



gb33服务端输出:



程序成功运行。

如果在运行客户端时出现如下错误,有可能是你的服务端小程序没有成功启动哦。



2.4查看服务器1234端口状态

现在gb34上运行3词客户端程序:



在查看服务端:



再在服务端查看端口1234状态:netstat -an|grep 1234

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: