java网络编程

来源:互联网 发布:js .index 编辑:程序博客网 时间:2024/05/01 19:17
网络通信
1.找到对方Ip,数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序
都用数字进行标识,为了方便称呼这个数字,叫做端口,逻辑端口。定义通信规则,这个通训规则称为协议,国际组织定义了通用协议tcp/ip(应用层(HTTP)、传输层(TCP、UDP)、网际层(ip)、网络接口层)

IP地址:主机名:localhost  本地回环地址127.0.0.1
对象:InetAddress

端口号:  有效端口0-65535(用于标识进程的逻辑地址,不同进程的标识)

UDP: 将数据及源和目的封装成数据包,不需要连接,每个数据报的大小在限制的64K内,因无连接,是不可靠协议
           不需要连接,速度快
            (聊天,数据共享)面向无连接

TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过3次握手完成连接,是可靠协议,必须建立连接
           效率会稍低。(打电话,)
   
Socket:  UDP传输:
Socket:  TCP传输
             1.  客户端的Socket类
               服务器端的ServerSocket类
               2.打开连接到Socket的输入、输出流
          3.按照协议对Socket进行读、写操作
          4.关闭输入输出流,关闭Soket

server.java
package test1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/*
* 基于TCP协议的Socket通信,实现用户登陆
* 服务器端
*/
public class Server {
     public static void main(String[] args) {
          try {
               //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
               ServerSocket serverSocket=new ServerSocket(8888);
               Socket socket=null;
               //记录客户端的数量
               int count=0;
               System.out.println("***服务器即将启动,等待客户端的连接***");
               //循环监听等待客户端的连接
               while(true){
                    //调用accept()方法开始监听,等待客户端的连接
                    socket=serverSocket.accept();
                    //创建一个新的线程
                    ServerThread serverThread=new ServerThread(socket);
                    //启动线程
                    serverThread.start();    
                    count++;//统计客户端的数量
                    System.out.println("客户端的数量:"+count);
                    InetAddress address=socket.getInetAddress();
                    System.out.println("当前客户端的IP:"+address.getHostAddress());
               }
          } catch (IOException e) {
               e.printStackTrace();
          }
     }
}


2.serverThread.java
package test1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

/*
* 服务器线程处理类
*/
public class ServerThread extends Thread {
     // 和本线程相关的Socket
     Socket socket = null;
     public ServerThread(Socket socket) {
          this.socket = socket;
     }
    
     //线程执行的操作,响应客户端的请求
     public void run(){
          InputStream is=null;
          InputStreamReader isr=null;
          BufferedReader br=null;
          OutputStream os=null;
          PrintWriter pw=null;
          try {
               //获取输入流,并读取客户端信息
               is = socket.getInputStream();
               isr = new InputStreamReader(is);
               br = new BufferedReader(isr);
               String info=null;
               while((info=br.readLine())!=null){//循环读取客户端的信息
                    System.out.println("我是服务器,客户端说:"+info);
               }
               socket.shutdownInput();//关闭输入流
               //获取输出流,响应客户端的请求
               os = socket.getOutputStream();
               pw = new PrintWriter(os);
               pw.write("欢迎您!");
               pw.flush();//调用flush()方法将缓冲输出
          } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }finally{
               //关闭资源
               try {
                    if(pw!=null)
                         pw.close();
                    if(os!=null)
                         os.close();
                    if(br!=null)
                         br.close();
                    if(isr!=null)
                         isr.close();
                    if(is!=null)
                         is.close();
                    if(socket!=null)
                         socket.close();
               } catch (IOException e) {
                    e.printStackTrace();
               }
          }
     }
}

3.client.java
package test1;

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

public class Client {
     public static void main(String[] args) {
          //1.创建客户端Socket,指定服务器地址和端口         
          try {
               Socket Socket =new Socket("localhost",8888);    
               //获取输出来,向服务器端发送信息
               OutputStream os=Socket.getOutputStream();      
               //将输出流包装成打印流
               PrintWriter pw=new PrintWriter(os);
               pw.write("用户名:tom;密码:785");
               pw.flush();
               Socket.shutdownOutput();         
               //获取输入流,读取服务器端响应信息
               InputStream is=Socket.getInputStream();
               BufferedReader br = new BufferedReader(new InputStreamReader(is));
               String info = null;
               // 循环读取服务器端信息
               while ((info = br.readLine()) != null) {
                    System.out.println("我是客户端,服务器说" + info);
               }           
               //关闭资源
               os.close();
               is.close();
               br.close();
               pw.close();              
               Socket.close();
          } catch (UnknownHostException e) {
               e.printStackTrace();
          } catch (IOException e) {         
               e.printStackTrace();
          }
     }
}
0 0
原创粉丝点击