Java Socket 入门1

由程序逻辑可以看到 这是一个 客户端和服务端一对一聊天的程序  首先由服务端说第一句话然后对话才开始 

且只能客户端一行话  服务端再一行话 这样往复进行  客户端若想不等服务端回应继续说话是不行的

服务端

package rakus;

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.ServerSocket;

import java.net.Socket;
public class MyServer {
    public static void main(String[] args) {
        try {
            ServerSocket ss;
            ss = new ServerSocket(8888);
            //wait for client to link then there will be a link between server and client
            Socket sk = ss.accept();
            System.out.println("a connection set up");
            //server has to send msg to client and get msg from client
            InputStream is=sk.getInputStream();
            OutputStream os=sk.getOutputStream();
            //BufferedReader对InputStreamReader作封装 以便于读一行数据
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            PrintWriter pw=new PrintWriter(os);
            //get msg from console and send
            BufferedReader brConsole=new BufferedReader(new InputStreamReader(System.in));
            String msg=null;
            String str = null;
            while(1==1){
                //print
                msg=brConsole.readLine();
                pw.println  ("server :  "+msg);
                //注意这里不能使用print  因为对方是使用readLine()来接收数据的 
                //没有ln的话总是认为一行话没有结束
                pw.flush();//pw可以使用  new PrintWriter(os.true)来创建  true表示autoFlush//那么就不用我手动Flush了
                //read str from scoket
                str = br.readLine();
                System.out.println(str);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
 

客户端

package rakus;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class MyClient {
    public static void main(String[] args) {
        try {
            // link server via ip and port
            // InetAddress.getLocalHost() 局域网中得到本机IP地址
            Socket sk = new Socket("127.0.0.1", 8888);
            // inputSteam is used for get msg from server
            // outputStream is for send msg to server
            InputStream is = sk.getInputStream();
            OutputStream os = sk.getOutputStream();
            //BufferedReader往往用来读一行数据    br是用于读网络中的一行数据
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            //pw用于把数据写入到网络中
            PrintWriter pw = new PrintWriter(os);
            //读取控制台的文字
            BufferedReader brConsole = new BufferedReader(new InputStreamReader(
                    System.in));
            // get a msg from server
            String str = null;
            String msg=null;//msg是发往客户端的消息
            while(1==1){
                //read
                str = br.readLine();
                System.out.println(str);
                // send msg to server
                msg = brConsole.readLine();
                pw.println("client : "+msg);
                pw.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
原文地址:https://www.cnblogs.com/cart55free99/p/3370198.html