JAVA系列之--网络编程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mayong1234567/article/details/82744753

前言

今日学到java种的通信知识,极大的引起了我的好奇,于是在学习的基础上,自己编写了 客户端和服务器 通信的代码,在局域网的情况下,客户端和局域网能够发送消息,同时在 俩台电脑的控制台可以显示对话信息.

服务器端代码:

import java.io.*;

import java.net.*;
import java.util.Scanner;
public class serverTest {
    public static ServerSocket ss;
    public static Socket s;
    public static void main(String[] args)throws Exception{

         //点对点通话 之发送字段
         try{
             //创建端口
            ss = new ServerSocket(5555);
            s= ss.accept();
            System.out.println("连接成功!");
         }catch(Exception e){
             System.out.println("系统非正常退出");
         }   
         // 创建并发进
         Runner1 r = new Runner1();
         Thread t = new Thread(r);
         t.start();

         //接受信息 
         InputStream is = null;
         DataInputStream dis =null;
         try{

            String read= null;
            dis = new DataInputStream(s.getInputStream());
            while(true){
                if ((read=dis.readUTF())!=null){
                    System.out.println("客户端: "+read);
                }
            }


         }catch(Exception e){

         }


    }

}
/*
 * 并发进程接受从客户端发来的程序
 */

class Runner1 implements Runnable{
    public void run(){  
        //已经连接, socket 是s
//      Socket socket = null;
//      try{
//           socket= new serverTest().ss.accept();
//      }catch(Exception e){
//          System.out.println("连接错误");
//      }
//      
        Socket socket = new serverTest().s;
        OutputStream os ;

        try {
            os=new serverTest().s.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            String line="连接成功";
            line = new Scanner(System.in).nextLine();//这里输入一行
            while(true){
                dos.writeUTF(line);
                dos.flush();
                line = new Scanner(System.in).nextLine();
            }



        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("发送错误");
        }        
    }
}

客户端代码:

package client;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class clientTest {
    //创建端口
    public static Socket socket;
    public static void main(String[] args)throws Exception{

         //点对点通话 之发送字段
         try{
             //创建端口
            socket = new Socket("192.168.1.159",5555);
         }catch(Exception e){
             System.out.println("系统非正常退出");
         }

         // 创建并发进
         Runner1 r = new Runner1();
         Thread t = new Thread(r);
         t.start();

         //接受信息 
         InputStream is = null;
         DataInputStream dis =null;
         try{

            String readLine = null;
            dis = new DataInputStream(is);
            readLine=dis.readUTF();
            while(true){
                if ((readLine=dis.readUTF())!=null) {
                    System.out.println("服务器:"+readLine);
                }
            }


         }catch(Exception e){

         }


    }

}
/*
* 并发进程接受从客户端发来的程序
*/

class Runner1 implements Runnable{
    public void run(){  
        OutputStream os;
        try {//发送 dataoutputstream
            os=  new clientTest().socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            String line;
            line = new Scanner(System.in).nextLine();//这里输入一行
            while(true){
                dos.writeUTF(line);
                dos.flush();
                line = new Scanner(System.in).nextLine();
            }


        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("发送错误");
        }       


    }
}

代码解释:
1 服务器端创建端口,并接受连接.
2 创建并发进程,也就是我们 无论什么时候,既可以发送信息,也可以接收信息,细分成为俩个模块.
3 服务器端和客户端 共同有的代码: 接受信息块, 发送信息块.
* 服务器和客户端所用到的流要相同, 我这里用到的是DataInputStream 和InputStream 不然回出现发送接收不到的错误
* 深刻理解并发进程的概念, 我们可以 利用并发 写出的代码不分先后顺序.
* 进程不是循环,所以在进程中,添加一个死循环,这样我们就可以不断运行双进程,进而能够不间断的接受和发送信息.

猜你喜欢

转载自blog.csdn.net/mayong1234567/article/details/82744753