socket套用字:
1>面向连接的socket通信协议TCP
2>面向无连接的socket通信协议UDP
socket由IP地址和端口号唯一确定。
socket的生命周期:
1>打开socket
2>使用socket收发数据
3>关闭socket
TCP通信过程:
1>server(服务器)端Listen(监听)指定的某个端口是否有连接请求
2>client(客户)端向server端口发出connect请求
3>server端向client端发回accept消息
例题:用socket实现客户端和服务器端的通信,要求客户发送数据后能够回显相同的数据。
第一步:首先创建一个名为server.java的服务器端代码:
package java_test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
class Server {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br=null;
PrintWriter pw=null;
try {
ServerSocket server=new ServerSocket(2000);
Socket socket=server.accept();//获取输入流
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));//获取输出流
pw=new PrintWriter(socket.getOutputStream(),true);
String s=br.readLine();//获取接受的数据
pw.println(s);//发送相同的数据给客户端
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try{
br.close();
pw.close();
}catch(Exception e){
}
}
}
}
第二步:创建一个client.java的客户端程序:
package java_test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br=null;
PrintWriter pw=null;
try {
Socket socket=new Socket("localhost",2000);//获取输入流和输出流
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw=new PrintWriter(socket.getOutputStream(),true);//向服务器发送数据
pw.println("Hello");
String s=null;
while(true){
s=br.readLine();
if(s!=null)
break;
}
System.out.println(s);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try{
br.close();
pw.close();
}catch(Exception e){
}
}
}
}
第三步:最后启动服务器端程序,然后运行客户端程序,客户端将会把从服务器端转发过来的“hello”打印出来。