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就完成了。

原文地址:https://www.cnblogs.com/sunxun/p/5347627.html