您的位置:首页 > 其它

新手学Socket,及常见问题解决,看完肯定学会Socket,demo绝对没问题

2014-09-17 23:07 375 查看
这两天一直在研究Socket编程,其实也说不上研究吧,就是想试一下Socket这个协议,了解一下而已。

 

首先,这里附上对Socket的初步了解:参考http://blog.csdn.net/mimitracely/article/details/8043995

先看看socket通信基础:

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 

Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。

服务器:

使用ServerSocket监听指定的端口,等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 

客户端:

使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。

 

0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。

 

 

后来发现,并没有想象中的那么简单。照着网上的代码打进去,还是运行不了,一大堆的错误,再看看Logcat,不是黄色就是红色。经过几天地努力,终于成功了。Socket很简单,就是一些小地方不注意很容易出错,一些新手(就像我),很容易出现以下各种问题

 

问题一:

用手机,或者模拟器作为服务器端的时候,总是不能真正的开启端口

(如何查看你是否开了端口,打开cmd输入netstat -aon,如下就可以看到已开启的端口)

解决:别用手机做服务器端,用电脑做服务器端,如果你用java工程,在main方法里运行,这样绝对可以开启端口

 

 

问题二:

用手机,或者模拟器作为客户端的时候,总是不能连接已经开启的端口

解决:把模拟器访问的ip设为:10.0.2.2。即----------------->socket=new
Socket("10.0.2.2",5546);

 ps:Android客户端别忘了上网权限<uses-permission android:name="android.permission.INTERNET"/>

 

下面是我的一个demo

http://download.csdn.net/download/u014736095/7934395

运行方式是:

1、先运行java工程启动服务端口,

2、然后运行Android工程向端口发送消息

运行过程截图:

最后发现,其实很简单。哈哈~~~~~~~~~~~~~~~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息