? ? ? 在21世纪的我们,在网络快速发展的世界,那对于我们而言,网络又是什么呢?今天我们来讲一下网络!!!
计算机网络:把分布在不同地理区域的,具有独立功能的计算机通过通信线路连接起来,能有实现资源共享和信息传递。
网络编程:使用计算机语言开发软件,让软件能够通过网络进行数据交换,java语言支持网络通信
网络编程的核心问题:
1.如何精确的找到计算机的目标主机
2.找到后如何安全可靠的传输数据?
- 协议对传输的速率
- 代码结构(报文)
- 出错的话进行协议
- ip+端口(找到主机的某个程序)
?网络模型:
- OST参与模型:7层-理想实现
- TCP/IP模型:? ?4层-实际实现
1.传输控制协议:TCP
2.用户数据协议:UDP
与服务器建立连接(三次握手),保证网络通畅,然后再进行数据传输,断开时进行(四次握手),保证客户端,服务端都之情吧,因为要建立连接所以传输较UDP慢。
?UDP:不需要建立网络连接,将数据,源,目标封装在数据包中,进行发送,发送是否成功不知道,不建立连接,速度快,不安全
Server:
public class Server {
public static void main(String[] args) throws IOException {
// //建立服务 不能使用已存在的端口
// ServerSocket serverSocket=new ServerSocket(9965);//0-65535
// System.out.println("服务器启动了");
// Socket socket=serverSocket.accept();//监听,有没有客户端尝试连接服务器
// System.out.println("客户端连接成功");
// //接收客户端发送的信息
// InputStream in= socket.getInputStream();
// OutputStream out =socket.getOutputStream();
// byte[] b=new byte[100];
// int size=in.read(b);
// //byte数组如何转为字符串
// String s= new String(b,0,size,"utf-8");
// System.out.println(s);
// //从服务器端向客户端发送信息
// out.write("你好,客户端".getBytes("utf-8"));
ServerSocket serverSocket=new ServerSocket(9965);//建立服务器,不能使用已被使用的端口
System.out.println("服务器启动了");
Socket socket= serverSocket.accept();//监听有没有客户端尝试连接服务器
System.out.println("服务器连接成功");
InputStream in=socket.getInputStream();//接受客户端发送的消息
OutputStream out= socket.getOutputStream();
byte []bytes=new byte[100];//创建一个数组
int size=in.read(bytes);//读取数组的长度
String s=new String(bytes,0,size,"utf-8");//将
System.out.println(s);
out.write("你好,客户端".getBytes("utf-8"));
}
}
Users:
package day20.Demo1;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Users {
public static void main(String[] args) throws IOException {
Socket socket=new Socket("192.168.31.110",9999);
OutputStream out= socket.getOutputStream();
out.write("网络女神你好".getBytes("utf-8"));
}
}
Receive:
package day20.Demo3;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class receive {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket=new DatagramSocket(9999);
byte[] bytes=new byte[1024];
DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length);
datagramSocket.receive(datagramPacket);
String msg=new String(datagramPacket.getData(),0,datagramPacket.getLength(),"utf-8");
System.out.println(msg);
}
}
Send:
package day20.Demo3;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.*;
public class send {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket=new DatagramSocket();
byte[]b="你好,客户端".getBytes("utf-8");
DatagramPacket datagramPacket=new DatagramPacket(b,b.length,InetAddress.getByName("127.0.0.1"),9999);
datagramSocket.send(datagramPacket);
}
}
上面只能对话一次。那如果是在我们平时生活中的聊天呢?加上Scanner和循环就可以实现基本的聊天功能了。
package day20.Demo4;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class recive {//客户端
public static void main(String[] args) throws IOException {
Socket socket=new Socket("192.168.31.111",9981);
while(true){
Scanner scanner=new Scanner(System.in);
String s1=scanner.next();
DataOutputStream date=new DataOutputStream(socket.getOutputStream());
date.writeUTF(s1);
DataInputStream dataInputStream=new DataInputStream(socket.getInputStream());
String s=dataInputStream.readUTF();
System.out.println("服务器说:"+s);
}}}
package day20.Demo4;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class send {//服务端
public static void main(String[] args) throws IOException {
// 5.引入循环与Scanner,
// 实现客户端向服务器端发送消息,服务器端接收消息,
// 并在服务器端向客户端返回一条消息,并在客户端打印输出.
// 实现多次发送
ServerSocket serverSocket=new ServerSocket(9967);
System.out.println("服务器创建成功,客户端正在连接中,请稍等...");
Socket socket=serverSocket.accept();
System.out.println("客户端连接成功");
while(true){
DataInputStream dataInputStream=new DataInputStream(socket.getInputStream());
String s=dataInputStream.readUTF();
System.out.println("客户端说:"+s);
Scanner scanner=new Scanner(System.in);
String s1=scanner.next();
DataOutputStream date=new DataOutputStream(socket.getOutputStream());
date.writeUTF(s1);
}
}}
|