网络编程中,IP地址是一个唯一标识通过这个唯一标识能够在网络上找到与之对应的主机。对于网络编程中常常要使用到的IP地址,java把它封装成了一个类-InetAddress。这个类中封装了许多对IP的操作,如getAddress(),getByName()等
UDP 1、不需要建立连接
2、因为无连接所以是不可靠协议
3、将数据及源和目的封装成数据包
4、每次数据包的大小限制在64K内
TCP 1、通过三次握手建立连接,是可靠协议
2、建立连接形成传输数据的通道
3、在连接中完成大量数据传输
4、由于必须要建立连接所以效率稍低
利用TCP连接实现 客户端输入数据服务器端将其转成大写再返回给客户端
TCP客户端建立
public class TcpClient{
public static void main(String[] args){
try {
Socket s=new Socket(InetAddress.getLocalHost(),10000);//获得本机地址 并设置端口号
//得到客户端Socket的输入流 操作字符转为字符流
BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream()));
//得到客户端Socket的输出流
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//获取键盘录入
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//定义变量 判断获取的数据 判空
String line=null;
while((line=br.readLine())!=null){
if(line.trim().equals("1")){
System.out.println("结束");
break;
}
//将键盘录入 写入Socket输出流
bufw.write(line);
//写入一空行 用于判断输入结束
bufw.newLine();
//刷新缓冲流 将数据写出
bufw.flush();
//调用Socket输入流读取有服务器传来的数据
String str= bufr.readLine();
System.out.println("+str);
}
bufw.close();
bufr.close();
} catch (Exception e) {
throw new RuntimeException("客户端异常");
}
}
}
TCP服务端
class TcpServer implements Runnable{
public void run(){
try {
//得到服务器端ServerSocket 并设置监听端口
ServerSocket ss=new ServerSocket(10000);
//获取连接的客户端Socket对象
Socket clients=ss.accept();
String ip=clients.getInetAddress().getHostAddress();
System.out.println("服务端IP:"+ip);
//得到客户端Socket对象的输入流 操作字符转为字符流
BufferedReader bufr=new BufferedReader(new InputStreamReader(clients.getInputStream()));
//得到客户端Socket对象的输出流
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(clients.getOutputStream()));
String line=null;
while((line=bufr.readLine())!=null){
String s=line.UpperCase();
//将数据写入客户端Socket对象的输出流
bufw.write(s);
//刷新并添加新行
bufw.newLine();
bufw.flush();
}
//关闭流
clients.close();
ss.close();
} catch (Exception e) {
throw new RuntimeException("服务器端异常");
}
}
}