微创客笔记系列
啥? 微创客写笔记了!
一学期即将结束,微创客将在接下来的时间里,有时间便推送自己对于java,matlab, SQL, 基本的算法,特别是神经网络算法的笔记,供大家参考。鄙人不才,有知识错误,敬请大家批评指正!
本期,俺就先推Socket通信编程吧!
对于大多数小伙伴来说,Socket编程几乎成为程序员必须掌握的知识点之一,对于它的重要性,俺在这里就不多废话了,有时间整理这些历史故事,发掘背后的力量!
首先,我们补一下计算机网络知识:
1. 数据传输层最重要的两个协议:
UDP数据包协议:(user datagram protocol 用户数据报文协议)
TCP数据传输协议:(transfer control protocol 传输控制协议)
2. 简单地说两个协议的异同点:
UDP传输不可靠,TCP传输数据可靠;
可靠和不可靠的区别:主要是数据传输时的数据的传输准确率;
TCP在传输数据前,需要确定好传输对方的是否在线;(确定性的传输);
UDP在传输前,没有确定传输对象的特点(消耗大量的网络资源);
3. 两种网络模型:OSI模型; Tcp/Ip模型;
4. 网络通信的要素:计算机网络通信本质是什么:是两台计算机之间应用进程之间的通信;
a) 使用TCP/IP协议;
b) 对方的IP地址;(唯一的标识计算机)
c) 端口号;(标识应用进程)
d) 传输协议;
5. Stack的编程:ip地址+端口号,套接字;
1. 数据在sokact 之间的IO传输;
2. Java.net中包含了许多的互联网的协议(IP地址)
3. Socket通信主要经过三次握手的操作:
客户端发送信息;
服务器端接受信息并且响应传回给客户端;
客户端再次发送信息;
具体的实现代码(java版):
服务器端代码:
import java.util.*;
import java.net.*;
import java.io.*;
class Sever_Socket {
public static final int PORT=8080;/**端口号*/
public static void main(String args[]) throws IOException{
SeverSocket s=new SeverSocket(PROT);/**服务器端连接客户端的端口*/
System.out.println("Started:"+s);
try{
Socket socket=s.accept();/**监听客户端发来的信息*/
try{
System.out.println("Connection accepted:"+socket);
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));/**读取客户端发来的输出流*/
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWtriter(socket.getOutputStream())),true);/**写入客户端发来的输出流存放到缓冲区*/
while(true){/**判断客户端发来的信息*/
String str=in.readLine();/**要求换行的标识符*/
if(str.equals("END")){
break; }
System.out.println("echoing:"+str);/**输出读取的字符段*/
out.println(str+str+"嘻嘻");
客户端代码:
import java.io.*;
import java.net.*;
import java.util.*;
class Client_Socket{
public static void main(String args[]) throws IOException{
InetAddress addr=InetAddress.getByName(null);/**获取本地计算机得名称*/
System.out.println("addr="+addr);
Socket socket=new Socket(addr,Sever_Socket.PORT);/**客户端确定端口号和计算机名称*/
try{
System.out.println("socket="+socket);
Buffereader on =new Buffereader(new InputStreamReader(socket.getInputStream()));/**接受服务器端的响应*/
PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);/**将服务器端的数据写入缓冲区*/
for(int i=0;i
out.println("呵呵"+i);
String str=in.readLine();
Syatem.out.println(str);/**输出数据*/ }
out.println("END"); }
finally{
System.out.println("closing...");
socket.close();/**关闭资源*/ }
}
领取专属 10元无门槛券
私享最新 技术干货