javaDay20_Socket

Socket:即时通讯,两个系统之间的随时的信息交互(双向的)

例如: qq 之间聊天

两个者怎么交互:

  1. 找到彼此
  2. 交流

计算机之间如何建立联系

    

  1. 协议:标记如何传输(交互)

TCP/IP协议 :目前世界上应用最广泛的一个通讯协议

TCP:Transmission Control Protocol 传输控制协议

IP:internet Protocol:互联网协议

2.IP地址:

为了实现网络中不同的计算之间的通讯,每台计算机都必须有一个唯一的标识

3.端口号:区分一台电脑上的不同的应用程序,给不同的应用做标记

端口号的范围0~65535 其中 0-1023为系统保留端口

Socket即时通讯协议:IP地址+端口号 组成了所谓的Socket ,socket 是网络上运行的程序之间双向通信链路的终结点【socket双向的通讯协议:双方有来有回,http单向的协议:调用者到被调用者】,是TCP和UDP的基础

Socket的写法:

  1. 客户端:用户使用的一个模块,可以访问服务端的信息

(1):建立客户端,填写访问的服务器ip和端口

(2):发送客户端信息到服务器

//客户端

public class SocketTest {

public static void main(String[] args) {

System.out.println("客户端启动");

Socket socket =null;

BufferedWriter bufw=null;

BufferedReader bufr=null;

try {

//建立客户端 访问某个ip+端口

socket=new  Socket("192.168.0.135", 9999);

            //socket.getOutputStream() 获取客户端的输出流

bufw=new BufferedWriter(

new OutputStreamWriter(socket.getOutputStream())

);

Scanner sc =new Scanner(System.in);

while(true){

System.out.println("请输入要发送的话");

bufw.write(sc.next());

bufw.flush();//释放

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally{

try {

bufw.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

//socket.shutdownOutput(); 关闭客户端输出

socket.shutdownOutput();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

  1. 服务端:为客户端提供支持(数据,业务…)的一个模块

(1):建立服务器对象,设置服务器端口

(2):获取访问服务器的客户端

(3):获取客户端输入的信息

//soke服务器

public class ServerSocketTest {

public static void main(String[] args) {

System.out.println("服务器启动");

//java.net.ServerSocket;socket服务器对象

//port :端口号,

ServerSocket serversocket=null;

BufferedReader bufr=null;

Socket socket=null;

try {

serversocket=new ServerSocket(9999);//标记服务器为9999号端口

//java.net.Socket:socket客户对象,socket协议的客户

//serversocket对象.accept()从服务器内接受一个客户对象

while(true){

socket=serversocket.accept();//获取一个访问服务器的客户端

    //socket.getInputStream() ;获取客户端的输入

bufr=new BufferedReader(

new InputStreamReader(socket.getInputStream())

);

         

             char[] cs= new char[1024];

           Scanner sc =new Scanner(System.in);

       while(bufr.read(cs)!=-1){

       System.out.println(new String(cs));

      

       }

            }

  

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

bufr.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

socket.shutdownInput();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

serversocket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值