最近去笔试联系,看到很多名词:网络编程,TCP/IP协议
跟我所学的socket编程有什么联系呢?(果然基础不到家啊!)
网络编程,java提供了一套API,利用这些API可以进行网络间通信,主要就是信息的接收和发送。这就是网络编程了!
TCP/IP协议:套接字,java利用TCP/IP协议给信息的接收和发送制定了标准。这些都是底层实现,可是还是会考?!
socket编程:就是编程人员的表层网络编程了,利用socket,而不需要关心底层的tcp/ip,就可以网络通信了!
首先看服务器端:
public static void main(String[] args) {
ServerSocket serverSocket=null;
Socket socket=null;
try {
//建立一个服务器Socket(ServerSocket)绑定指定端口并开始监听
serverSocket = new ServerSocket(10200);
//使用accept()方法阻塞等待监听,活动新的 链接
socket=serverSocket.accept();
System.out.println("监听到客户端请求!");
//得到socket的读写流
OutputStream os=socket.getOutputStream();
PrintWriter pw= new PrintWriter(
new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
//输入流
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String servletRes="";
//读取请求信息
for(;;){
servletRes=br.readLine();
if(br.equals("over")){
break;
}
System.out.println("这是服务器,接收的客户端请求是:"+servletRes);
//给客户端做出响应,发送信息需要在循环内做出响应,防止阻塞在循环内无法响应
pw.println("我是服务器!");
pw.println("我是服务器!");
pw.println("over");
}
pw.close();
os.close();
br.close();
is.close();
//socket.close();
//serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
其次客户端:
public static void main(String[] args) {
Socket socket=null;
try {
socket=new Socket("localhost",10200);
//得到socket的读写流
OutputStream os=socket.getOutputStream();
PrintWriter pw= new PrintWriter(
new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
//输入流
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//向服务器发送信息,发送请求
pw.println("我是客户端!");
pw.println("我是客户端!");
pw.println("over");
String servletRes="";
//读取响应信息
for(;;){
servletRes=br.readLine();
if(br.equals("over")){
break;
}
System.out.println("这是客户端,接收的响应是:"+servletRes);
}
pw.close();
os.close();
br.close();
is.close();
//socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
首先运行服务器端,在运行客户端,在控制台可以查看信息;
服务器输出:
监听到客户端请求!
这是服务器,接收的客户端请求是:我是客户端!
这是服务器,接收的客户端请求是:我是客户端!
这是服务器,接收的客户端请求是:over
客户端输出:
这是客户端,接收的响应是:我是服务器!
这是客户端,接收的响应是:我是服务器!
这是客户端,接收的响应是:over
这是客户端,接收的响应是:我是服务器!
这是客户端,接收的响应是:我是服务器!
这是客户端,接收的响应是:over
这是客户端,接收的响应是:我是服务器!
这是客户端,接收的响应是:我是服务器!
这是客户端,接收的响应是:over