Socket 中文翻译是 “插座”
通过这个翻译就很容易理解,就是提供了插口,你的工具插入插座,并且可以和插座进行交互建立联系,即可让你的工具开始工作。
于是不得不提TCP和UDP了。
TCP
Transmission Control Protocol
传输控制协议
TCP是实时的,如果访问某地址是有响应的,而且响应符合格式要求,那么就会接收该响应,完成返回。
UDP
用户数据报协议
UDP不是实时的,数据包发给指定地址,但不会等对方是否响应,会继续发包,如果你之前断开了连接,那么之前的数据包你无法再次请求。主要用于直播和C/S模式的在线游戏等。
TCP很像打电话,UDP很像发短信。
引用一张stackoverflow上的图片:
这是计算机网络必学的内容,我们或许在学习的时候没有特别在意,但是这很基础,也很重要。
大多数操作系统都提供能与网络通信的API,使用TCP可以使用Socket按照HTTP规范进行消息编码,完成通信,大部分编程语言都做了很好的封装来帮助我实现该功能。
Java 实现
import java.io.*;
import java.net.*;
public class smtpClient {
public static void main(String[] args) {
// declaration section:
// smtpClient: our client socket
// os: output stream
// is: input stream
Socket smtpSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
// Initialization section:
// Try to open a socket on port 25
// Try to open input and output streams
try {
smtpSocket = new Socket("hostname", 25);
os = new DataOutputStream(smtpSocket.getOutputStream());
is = new DataInputStream(smtpSocket.getInputStream());
} catch (UnknownHostException e) {
System.err.println("Don't know about host: hostname");
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: hostname");
}
// If everything has been initialized then we want to write some data
// to the socket we have opened a connection to on port 25
if (smtpSocket != null && os != null && is != null) {
try {
// The capital string before each colon has a special meaning to SMTP
// you may want to read the SMTP specification, RFC1822/3
os.writeBytes("HELO\n");
os.writeBytes("MAIL From: k3is@fundy.csd.unbsj.ca\n");
os.writeBytes("RCPT To: k3is@fundy.csd.unbsj.ca\n");
os.writeBytes("DATA\n");
os.writeBytes("From: k3is@fundy.csd.unbsj.ca\n");
os.writeBytes("Subject: testing\n");
os.writeBytes("Hi there\n"); // message body
os.writeBytes("\n.\n");
os.writeBytes("QUIT");
// keep on reading from/to the socket till we receive the "Ok" from SMTP,
// once we received that then we want to break.
String responseLine;
while ((responseLine = is.readLine()) != null) {
System.out.println("Server: " + responseLine);
if (responseLine.indexOf("Ok") != -1) {
break;
}
}
// clean up:
// close the output stream
// close the input stream
// close the socket
os.close();
is.close();
smtpSocket.close();
} catch (UnknownHostException e) {
System.err.println("Trying to connect to unknown host: " + e);
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}
}
}
主要实现步骤就是
(1)创建一个socket
(2)给socket创建一个输入和输出流
(3)根据服务协议读取信息
(4)清除,收尾工作
具体的应用示例,可以参考我的 《Java局域网象棋》
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦