IP地址
网络中主机的标识。
获取主机的地址
InetAddress i = InetAddress.getByName(“www.bilibili.com”);.
println(ⅰ.getHostAddress());
System.out.println(ⅰ.getHostName());
getByName()方法,根据提供的主机地址,返回一个InetAddress对象。通过返回的对象的方法来获取主机的地址/名称,如果找不对主机地址和名称的映射,则主机的名称也是地址。
本机的地址
获取本机地址的getLocalHost()
**TCP和UDP **
UDP:不需要建立连接,速度快,每个数据包的大小限定64KB,超出则分割数据包,可靠性低.
TCP :三次握手建立链接,速度相对慢,数据包大小没有限定,断开连接口停止发送数据,可靠性高.
UDP发送/接收数据
发送端设置发送端口号,如果不进行设置,会进行随机分配。接收端也要设置端口号,如果不进行设置,也会进行随机分配。 如果想要在指定接收端接受到数据,需要设置接收端口。
UDP代码:
发送端
import javax.xml.crypto.Data;
import com.sun.org.apache.xml.internal.resolver.readers.ExtendedXMLCatalogReader;
import java.net。*;
class send {public static void main(String [] args)throws Exception
{DatagramSocket ds = new DatagramSocket();
byte [] data =“我发送此消息”.getBytes();
DatagramPacket dp = new DatagramPacket(data,data.length,InetAddress.getByName(“192.168.1.68”),2333);
ds.send(DP); ds.close();
}
}
接收端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
class receive {public static void main(String [] args)throwsException
{DatagramSocket ds = new DatagramSocket(2333);
byte [] data = new byte [1024]; DatagramPacket dp = new DatagramPacket(data,data.length);
ds.receive(DP); System.out.println(“ip”+ dp.getAddress()。getHostName()。toString());
String s = new String(dp.getData()); System.out.println(“data”+ s);
System.out.println(“port”+ dp.getPort()); ds.close();
}
}
TCP传输 -
TCP传输的建立:需要一个服务端和Ñ个客户端,客户端连接到服务端,与服务端进行通信。
插座:创建客户端ServerScoket:创建服务端。
利用TCP来进行客户端与服务端的通信,并通过服务端向客户端返回信息
客户端代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; import java.net.Socket;
class serverClient
{
public static void main(String [] args)throws Exception
{
Socket s = new Socket(“192.168.1.43”,2333);
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
BufferedReader bfr2 = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line = null;
while((line = bfr.readLine())!= null)
{
bfw.write(线);
bfw.newLine();
bfw.flush();
System.out.println(bfr2 .readLine());
}
}
}
服务端代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket; import java.net.Socket;
class serverManager {public static void main(String [] args)throws Exception
{
ServerSocket ss = new ServerSocket(2333);
Socket s = ss.accept();
System.out.println(“IP ==”+ s.getInetAddress()。getHostAddress()+“已成功连接”);
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
BufferedReader bfr2 = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line = null;
while((line = bfr2.readLine())!= null)
{
System.out.println(line);
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}
}
}
服务端获取客户端的对象,使用相对应的对象的输入输出向客户端反馈信息,不会打乱。自动刷新,自动换行的优化方法
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);