zoukankan      html  css  js  c++  java
  • Java联网技术之一TCP socket

    最近突然对java网络编程编程这一块非常感兴趣,于是找了很多资料,一点点的尝试,下面是自己的一点小见解,不喜勿喷,欢迎指正。

    首先说说客户端和服务器端吧,

    如果是网页的话,客户端通过网页的链接对服务器发送请求,服务器做出处理返回给客户。

    如果是app的话,那如果自己写服务器端的话,那就是用户通过客户端操作,想服务器端发送请求,然后服务器端就会相应的做出回应。

    原理都是一样的。

    下面上代码。注意。如果是在eclipse里面的话,先运行服务器代码,再运行客户端代码。

    服务器代码:

    package com.sun;
    
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TcpServer {
    
        public static void main(String[] args) throws IOException  {
            System.out.println("这里是服务器!");
            //6666为服务器的端口号
            ServerSocket server = new ServerSocket(10000);
             System.out.println("Server is starting...");
             Socket client = server.accept();//监听端口,并接收客户端来的请求
             
             //第二.得到客户端的输入流(这里注意,客户端的输出其实到服务器端了就是输出了,也就是请求对应响应的关系)
             InputStreamReader inputstreamreader = new InputStreamReader(client.getInputStream());//得到输入的字节流
             
             BufferedReader br = new BufferedReader(inputstreamreader); //将得到的字节流读入缓冲区
             //第三,得到客户端的输出流,想客户端的输出流传入数据
             PrintWriter pw = new PrintWriter(client.getOutputStream(),true);//得到一个客户端的响应流
             String line = "";
            
             while(line != null){
                 line = br.readLine();
                 FileOutputStream file = new FileOutputStream("Person.txt");//这里是用一个文本接收,写入,表示服务器
                 //端接收到了数据
    /*             byte[] b = new byte[1024];
                 b = line.getBytes();
                 file.write(b);*/
                 pw.println("服务器接收的是:" + line);
                 
                 file.flush();
                 
             }
    
             br.close();
             pw.close();
        }
    }

    客户端代码:

    package com.sun;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.SocketException;
    
    public class TcpClient {
    
        /**
         * @param args
         * @throws IOException 
         */
    
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            InetAddress host = InetAddress.getLocalHost();
            Socket client = new Socket(host,10000); //根据一个端口号和IP连接一个服务器
            
            //第一:得到一个客户端的输出流,
            PrintWriter pw = new PrintWriter(client.getOutputStream(),true);
            //通过输出流将数据通过流的方式传送到服务器端
            BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
            String str = wt.readLine();
            pw.println("您输入的是=" + str);
            
            //第四.客服端接收到服务器传输的输出流变成输入流(接收到响应的数据)
            //接收服务器返回的数据
            BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
            String line = br.readLine();
            System.out.println("客服端输出="+line);
                         
            br.close();
            pw.close();
            client.close();
        }
        
    }

    输出结果为:

    nihao
    客服端输出=服务器接收的是:您输入的是=nihao

    这样一个简单的socket就完成了。

  • 相关阅读:
    模块与包的导入
    递归
    day04
    装饰器2_根据认证来源判断用户和计算登录时间
    装饰器1_统计时间函数装饰欢迎登录函数
    tail -f a.txt | grep 'python'
    函数
    内置函数1
    python模块整理
    VBS恶作剧代码
  • 原文地址:https://www.cnblogs.com/sunxun/p/5347627.html
Copyright © 2011-2022 走看看