这个月公司带领我们学习了socket通信的基本方法。
我们在局域网(局域网相对于广域网来说的,广域网在广域网下也是一个局域网)里面,是通过什么来识别对方的呢?局域网下我们会被自动分配一个IP地址,而唯一的识别则是MAC地址,每一台机子的MAC地址都是不一样的。通常,我们通过IP地址则可以确定一个局域网内的某台主机,而要访问这台主机,则还需要端口号,即访问一台机器所必备的东西有:局域网IP地址,端口号。
通信是使用了传输层的TCP/IP协议簇,常用的有TCP/IP协议,UDP协议,SMTP等。
TCP/IP协议是一种面向连接的,可靠的网络传输协议。TCP/IP协议中拥有流量控制和拥塞控制机制,流量控制是通过滑动窗口实现的,而拥塞控制则是用慢开始,快重传等方式实现。TCP/IP协议的连接通常称为“三次握手”。首先由客户机发送给服务器一个SYN(建立连接的信号),这是第一次握手,然后服务器回传ACK(一个确认信号)+SYN,这是第二次握手,最后客户机再发送一个ACK,完成第三次握手,最后进入连接状态。
UDP是一种面向无连接的,高效而不可靠的传输协议。客服机只是负责发送数据接收数据,而服务器和客户机之间不存在任何连接形式,类似于发信息,不需要建立连接。
TCP程序模式:
UDP程序模式:
简单Server程序的实现
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class server { public String readString() { int i=0; String s=""; StringBuffer stb=new StringBuffer(); char c=0; try{ while(c!=13) { i=inpus.read(); c=(char)i; stb.append(c); } s=stb.toString().trim(); }catch(Exception e) { e.printStackTrace(); } return s; } public void setUpServer(int port) { try { ServerSocket server=new ServerSocket(port); Socket client=server.accept(); String info="welcome to check in!\r\nplease input the name!\r\n"; outpus.write(info.getBytes()); outpus.flush(); name=readString(); String s=""; while(!s.equals("bye")) { s=readString(); System.out.println(name+":"+s); String getS=name+":"+s+"\r\n"; outpus.write(getS.getBytes()); } client.close(); } catch (IOException e) { e.printStackTrace(); } } }
程序流程:
首先建立一个ServerSocket套接字,绑定端口(0-65535)部分端口被本地应用程序占用。然后等待客户端的接入,并得到相对于连入socket的一个输入输出流,Output写入数据到客户机,Input接受数据到服务器。注意:这是个单线程服务器,只能单个socket连入。
相对于代码而言,我对机制和算法的兴趣比较大,理论的理解显得更富有激情。
使用telnet客户端进行服务器的测试,今后会自己写client端。
相关推荐
简单socket通信
2个窗口分别模拟服务器端和客户端,基于TCP协议的socket通信,实现互相通信
C++实现简单Socket通信,最基本的代码。可以作为初始学习socket功能使用,仅供参考...................
基于JAVA的简单Socket通信.pdf
本篇文章主要介绍了JAVA实现基于Tcp协议的简单Socket通信实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Ssocket单对多,带有广播通信,Ssocket单对多,带有广播通信Ssocket单对多,带有广播通信Ssocket单对多,带有广播通信
JSwing实现简单socket通信程序(登录注册群聊) 登陆注册群聊功能,可发送表情,详细介绍: ggbond.cc/JSwing实现简单socket通信程序(登录注册群聊)
基于C#与WPF开发的简单Socket通信示例
简单实现了socket单项通信,初学socket成果,分享出来。
简单的java socket通信,适合初学者,可以扩展成聊天软件
C#实现的简单Socket通信。以及AES加密。
本项目是一个基于Socket通讯的例子源码,实现了一个简单的交互功能:安卓客户端发送“半径”值给服务端,服务器计算出圆面积,再发送回客户端。服务端是用的一个无限循环来等待客户端请求和消息,本项目有java服务端...
本资源主要是用Qt5.9Creator写的一个socket通信的实例,采用的协议是TCP/IP,包括客户端和服务器。经过测试,在局域网和本机电脑上都可以正常通信,具体的教程在本人的博客地址里面:...
主要介绍了python实现简单socket通信的方法,结合实例形式分析了socket通信服务端与客户端的具体实现技巧,需要的朋友可以参考下
该压缩文件中分别包含Client端代码和Server端代码,可以实习简单的Socket连接!适合想了解Socket通信机制的朋友!
一个简单的Socket通信源码支持群发信息,文件传送,文件群发等功能。
socket通信库,c++编写,只需调用几个函数即可完成socket通信过程。简单易用,C#等其他语言可调用.问题沟通可发送邮件至gaocongly@126.com