Socket
socket 可以理解为快递站,我们淘宝买东西商家会通过给离他们最近的快递点(scoket)寄出包裹(需要传输的东西),包裹经过运输到买家最近的快递站由买家接收卖家传过来的东西
socket分类
流式套接字Sock_STREAM 面向连接,可靠的数据传输服务 tcp协议
数据保式套接字 SOCK_DGRAM 无连接服务 UDP协议
原始套接字 SOCK_RAW
socket传输
服务端
public static void main(String[] args) {
try {
ServerSocket serverSocket=new ServerSocket(6666);
//监听并接受到此serverSocket的链接
Socket socket=serverSocket.accept();
//监听开启之后就要去接收客户端的信息
InputStream is=socket.getInputStream();
//接收到之后用BuffReader来遍历效率更高
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String cc;
while ((cc=br.readLine())!=null){
System.out.println("客户端信息是"+cc);
}
//发送资源给客户端
String s="你好客服端";
OutputStream os=socket.getOutputStream();
os.write(s.getBytes());
//关闭资源先开的后关
os.close();
br.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
客服端
//要发送东西需要也创建Socket
try {
Socket socket=new Socket("localhost",6666);
//和服务器链接需要去发送东西定义一个需要写的东西
String info="这是客服端发送的信息";
//写的是字符但是接收的是字节需要去分解
OutputStream os=socket.getOutputStream();
byte[] c=info.getBytes();
os.write(c);
//通过输入流接收服务器!!!
socket.shutdownOutput();
//接收服务器的信息
InputStream is=socket.getInputStream();
BufferedReader bf=new BufferedReader(new InputStreamReader(is));
String s;
while ((s=bf.readLine())!=null){
System.out.println("服务器发出"+s);
}
//用完之后关闭资源
// bf.close();
//is.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
多线程传输
线程类
public class ThreadeDuan extends Thread {
//把这个作为线程的私有属性
private Socket socket;
//传过的sockert赋值给线程绑定的socker
public ThreadeDuan(Socket socket) {
this.socket = socket;
}
public void run(){
try{
//当数据为对象收到的时候
//监听开启之后就要去接收客户端的信息
InputStream is=socket.getInputStream();
BufferedReader bf=new BufferedReader(new InputStreamReader(is));
String js;
while ((js=bf.readLine())!=null){
System.out.println("客户端说"+js);
}
//释放资源
bf.close();
is.close();
socket.close();
}catch (Exception ec){
ec.printStackTrace();
}
}
}
服务器
public class FuDuan {
public static void main(String[] args) {
try {//创建服务端
ServerSocket serverSocket = new ServerSocket(8869);
//建立监听接口
while (true){
Socket socket=serverSocket.accept();
ThreadeDuan td=new ThreadeDuan(socket);
td.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
public class KeDuan01 {
public static void main(String[] args) {
try {
Socket socket=new Socket("localhost",8869);
OutputStream os=socket.getOutputStream();
//发送信息
String s="01客服端发送请求";
byte [] cc=s.getBytes();
os.write(cc);
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}