Socket:即时通讯,两个系统之间的随时的信息交互(双向的)
例如: qq 之间聊天
两个者怎么交互:
- 找到彼此
- 交流
计算机之间如何建立联系
- 协议:标记如何传输(交互)
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):建立客户端,填写访问的服务器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):建立服务器对象,设置服务器端口
(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();
}
}
}
}