TCP传数据
class server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(44444);
Socket accept = serverSocket.accept();//阻塞式
InputStream inputStream = accept.getInputStream();
byte[] b=new byte[1024];
int read = inputStream.read(b);//等着数据过来,可以理解用B装数据
System.out.println(new String(b,0,read));
OutputStream outputStream = accept.getOutputStream();
outputStream.write("server发送".getBytes());
inputStream.close();
}
}
class client{
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1",44444);
OutputStream outputStream = socket.getOutputStream();
outputStream.write("客户段发送".getBytes());
InputStream inputStream = socket.getInputStream();
byte[] b=new byte[1024];
int read = inputStream.read(b);//等着数据
System.out.println(new String(b,0,read));
inputStream.close();
outputStream.close();
socket.close();
}
}
多线程下TCP传输
class server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(44444);
while(true){
Socket s = serverSocket.accept();
new Thread(new mythread(s)).start();//每次开辟新线程处理,不用等待,且服务器开着
}
}
}
class client{
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1",44444);
OutputStream outputStream = socket.getOutputStream();
outputStream.write("客户段发送".getBytes());
outputStream.close();
socket.close();
}
}
public class mythread implements Runnable {
private Socket s;
public mythread(Socket s){
this.s=s;
}
public void run() {
try {
InputStream is = s.getInputStream();
byte[] b=new byte[104];
int read = is.read(b);
System.out.println(new String(b,0,read));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
}
}
}
TCP:可靠。传输无限制,需要建立时间,差错控制开销大
UDP:不可靠。差错控制开销小,传输大小64K。不需要建立连接
udp传输。可以看成两个港口传输货物,港口包装数据港口地址等信息发送,那边接收则以数据容器接收货物,接收后可以获取发送端的信息,数据IP地址等。
class send {
public static void main(String[] args) throws Exception {
DatagramSocket ds=new DatagramSocket();//创建发送端对象
byte[] b="hello upd".getBytes();
InetAddress byName = InetAddress.getByName("127.0.0.1");
DatagramPacket ff=new DatagramPacket(b,b.length,byName,10026);//搜集数据包对象
ds.send(ff);
}
}
class recive{
public static void main(String[] args) throws UnknownHostException, IOException {
DatagramSocket ds=new DatagramSocket(10026);//接受端口
//创建接受数据容器
byte[] b=new byte[1024];
int i = b.length;
DatagramPacket datagramPacket = new DatagramPacket(b,i);
ds.receive(datagramPacket);//阻塞式等待接受数据
byte[] data = datagramPacket.getData();
int length = data.length;
System.out.println(new String(data,0,length));
}
}