TCP
1:客户端与服务器开启是有先后顺序的
先启动服务器,后启动客户端
2:socket对象:
1)客户端称之为socket对象
2)服务器端称之为serversocket对象
3)客户端在创建时需要指定IP和端口
4)服务器创建时需要制定监听端口
5)数据的收发都是通过IO流完成的,所有的数据信息都是通过socket获取输入流/输出流(getInputStream/getOutputStream)
6)对于服务器而言,获取客户端的socket对象,使用accept()(阻塞方法)
3:编码套路:
client:
1)创建socket对象(IP端口)
2)获取流对象(你要干甚)
3)发送/接受数据信息
4)关闭资源
server:
1)创建serversocket(对象端口)
2)通过accept方法获取客户端socket对象
3)获取流对象(你要干甚)
4)发送/接受数据信息
5)关闭资源
package com.mage.clinet;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class ClinetA {
public static void main(String[] args) throws IOException{
Socket client = new Socket(InetAddress.getLocalHost(),11002);
OutputStream os = client.getOutputStream();
os.write("Hello".getBytes());
os.close();
client.close();
}
}
package com.mage.server;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerA {
public static void main(String[] args)throws IOException{
ServerSocket server = new ServerSocket(11002);
Socket client = server.accept();
InputStream is = client.getInputStream();
byte[] buf = new byte[1024];
int length = is.read(buf);
System.out.println(new String(buf,0,length));
is.close();
client.close();
}
}
UDP
UDP发送信息:
基于发送方和接收方,都是通过DatagrameSocket对象去指定
特点:启动发送方不会报错、不安全
package com.mage.send;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class udp {
public static void main(String[] args) throws IOException {
DatagramSocket send = new DatagramSocket(11001);
String str = "海南三亚";
byte[] buf = str.getBytes();
int length = buf.length;
InetAddress ip = InetAddress.getLocalHost();
int port = 10001;
DatagramPacket dp = new DatagramPacket(buf,length,ip,port);
send.send(dp);
}
}
package com.mage.send;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class Rec {
public static void main(String[] args) throws IOException {
DatagramSocket rec = new DatagramSocket(11001);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
rec.receive(dp);
InetAddress in = dp.getAddress();
byte[] recBuf = dp.getData();
int length = dp.getLength();
int port = dp.getPort();
String data = new String(recBuf,0,length);
System.out.println(in.getHostName()+"\t"+port);
}
}
TCP与UCP区别
TCP:面向有连接,相当于打电话(确认后通信)
安全,发送数据无长度限制,但效率慢
UDP:面向无连接,相当与发短息(无需确定就可通信)
不安全、发送数据长度有限制(64K),效率快