一,网络基础简介
1.TCP/IP协议 :
TCP:传输控制协议
IP:互联网协议
2.TCP/IP模型
5 应用层 (HTTP协议)
4 传输层 (TCP/IP协议)
3 网络层
2 数据链路层
1 物理层
3.IP地址:
每台机器唯一的标识 ,格式 ***.***.*.*
4,端口:
用于区分不同的应用程序,范围为0~65535,0~1023为系统保留
http:80 ftp:21 telnet:23
二,java中的网络支持
1.InetAddress :用于标识网络上的硬件资源
2, URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
3,Socket:使用TCP协议实现网络通信的Socket相关的类
4,Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.MalformedInputException;
public class InetAddressTest {
static BufferedReader br;
public static void main(String[] args) throws IOException {
try{
URL url=new URL("http://www.baidu.com");
br=new BufferedReader(new InputStreamReader(url.openStream(),"utf-8"));
String data=br.readLine();
while(data!=null){
System.out.println(data);
data=br.readLine();
}
}catch(MalformedInputException e){
e.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}finally{
if(br!=null){
br.close();
}
}
}
}
Socket通信实现步骤:
1.创建ServerSocket和Socket
2.打开连接到Socket的输入/输出流
3.按照协议对Socket进行读/写操作
4.关闭输入输出流,关闭Socket
服务器端:
1.创建ServerSocket对象,绑定监听端口
2.通过accept()方法监听客户端请求
3.连接建立后,通过输入流读取客户端发送的请求信息
4.通过输出流向客户端发送响应信息
5.关闭相关资源
客户端:
1.创建Socket对象,指明需要连接的服务器的地址和端口号
2.连接建立后,通过输出流向服务器端发送请求信息
3.通过输入流获取服务器响应的信息
4.关闭相关资源
服务器端:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
Socket socket=null;
int count=0;
try {
ServerSocket serverSocket=new ServerSocket(6688);
while(true){
socket =serverSocket.accept();
ServerThread serverThread=new ServerThread(socket);
serverThread.start();
count++;
System.out.println("客户端的数量为:"+count);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(socket!=null){
socket.close();
}
}
}
}
服务器端多线程执行类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread extends Thread {
Socket socket=null;
BufferedReader br=null;
PrintWriter pw=null;
public ServerThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
//获取输入流,并读取客户端信息
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String info=null;
while((info=br.readLine())!=null){
System.out.println(info);
}
socket.shutdownInput(); //关闭输入流
pw=new PrintWriter(socket.getOutputStream());
pw.write("欢迎您!,我是服务器端");
pw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(socket!=null)
socket.close();
if(br!=null)
br.close();
if(pw!=null)
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket=null;
PrintWriter pw=null;
BufferedReader br=null;
try {
socket=new Socket("localhost", 6688);
pw=new PrintWriter(socket.getOutputStream());
pw.write("用户名:tom;密码:456");
pw.flush();
socket.shutdownOutput();
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String info=null;
while((info=br.readLine())!=null){
System.out.println("我是客户端,服务器说"+info);
}
socket.shutdownInput();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(socket!=null){
socket.close();
}
if(pw!=null){
pw.close();
}
if(br!=null){
br.close();
}
}
}
}