网络编程

一、网络编程的概念

网络编程!=网站编程

二、为什么要使用socket?

当两个应用程序之间需要交换数据的时候,用socket

三、重要名词解释:

套接字:ip地址+端口号

ip地址:用来唯一标识一台主机

端口号:用来唯一标示一个进程 占两个字节

四、TCP和UDP的区别

TCP:传输控制协议,面向连接的,安全的,有顺序的

UDP:用户数据报协议面向无连接的,不安全的,无顺序的

五.在TCP模式下演示建立端口通道

服务器端口:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

//服务器端
public class Server {
 public static void main(String[] args) throws Exception {
  //Socket编程 共三步  类似打电话
  //一.创建socket连接   (拨号并接通)
  //1.新建ServerSocket
  ServerSocket ss = new ServerSocket(6666);
  //3.接受连接 
  Socket socket=null;
  
    socket = ss.accept();//阻塞式的  傻傻的等待 等待一个客户端连接
   System.out.println("有一个客户端相连");
   //二.I/O操作 (说话)
   System.out.println("************服务器读执行***********");
   //1.建立通道
   InputStream is = socket.getInputStream();
   InputStreamReader isr = new InputStreamReader(is);
   BufferedReader br = new BufferedReader(isr);
   //2.利用read读
   /**/String message = br.readLine();//阻塞式 傻傻的等待 等待客户端写
   System.out.println("有客户端给我打招呼,内容是:" + message);
  
   /*String message=br.readLine();
   System.out.println("有客户端给我打招呼,内容是:"+message);
   System.out.println("************服务器写执行***********");*/
   //服务器给客户端说  你坏
   //1.建立通道
   OutputStream oo = socket.getOutputStream();
   //字节流--->字符流
   OutputStreamWriter osw = new OutputStreamWriter(oo);
   BufferedWriter bw = new BufferedWriter(osw);
   //2.利用write写
   bw.write("你坏");
   bw.write("\n");
   bw.flush();
   //3.关闭通道
  
   if(oo!=null){
    oo.close();
   }
   if(is!=null){
    is.close();
   }
   //三.关闭socket连接 (挂电话)
   if(socket!=null){
    socket.close();
   }
  }
  
  
  //阻塞 为了等待客户端连接
  //有一个客户端相连
  //阻塞 为了等待客户端输出  等待6秒
  //有客户端给我打招呼,内容是:你好,服务器
 
}

客户端:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

//客户端
public class Client {

 public static void main(String[] args) throws Exception
   {
  
  String str = "你好,服务器";
  // 一.创建socket连接
  // 2.申请连接(相当于拨号,但别人不一定接) 系统给该进程自动分配一个端口1024以上
  Socket s = new Socket("127.0.0.1", 6666);
  
  //二.I/O操作
  System.out.println("************客户端写执行***********");
  //1.建立通道
  OutputStream oo = s.getOutputStream();
  //字节流--->字符流
  OutputStreamWriter osw = new OutputStreamWriter(oo);
  BufferedWriter bw = new BufferedWriter(osw);  
  //2.利用write写
  bw.write(str);
  bw.flush();
  System.out.println("************客户端读执行***********");
  //客户端接收
  InputStream is = s.getInputStream();
  InputStreamReader isr = new InputStreamReader(is);
  BufferedReader br = new BufferedReader(isr);
  //2.利用read读
  String message = br.readLine();//阻塞式 傻傻的等待 等待客户端写
  
  System.out.println("服务器说:" + message);
  //3.关闭通道
  if(br!=null){
   br.close();
  }
  if(isr!=null){
   isr.close();
  } 
 if(is!=null){
   is.close();
  }  
  //三.关闭socket连接
  if(s!=null){
   s.close();
  }
  

 }
}
六、下面四种情况肯定关闭socket连接

1.调用socket对象的close()方法

2.如果关闭了socket中的输入输出流,socket也自动关闭

3.应用程序结束后,socket也会自动关闭

4.socket socket=null;socket对象置空,或者是让这个socket对象的引用从新引用一个新的socket对象,原来的socket对象就会变成垃圾,被垃圾回收器回收,内存回收以后,socket就关闭了

七、br.readline():为什么会阻塞?

因为BufferedReader只有碰到\n的时候,才能真正的读进来数据,解决方案是在输入的时候 每行要加一个\n

八、URL、URI和URN三者的区别

URI 统一资源标识符

URL 提供一种找到资源的方式 就像人的地址加名称

URN 只是一个资源的名称 不提供找到资源的方式 就像人名和身份证

 

 

 


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值