java 网络通信 socket

Java语言作为一门现在网络编程的主要语言,它提供了强大和独特的网络通信支持机制和能力, Java API 网络类包中的Socket类是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。

Socket 通信结构


用户端代码:

import java.io.*;
import java.net.*;


public class SingleTalkClient
{
    public static void main(String[] args) throws IOException
{


        Socket client = null;
        PrintWriter out = null;
        BufferedReader in = null;


        try {
            client = new Socket("127.0.0.1", 4444);
            out = new PrintWriter(client.getOutputStream(), true); //auto flush
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: 127.0.0.1.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: 127.0.0.1.");
            System.exit(1);
        }


        //从标准输入流(键盘)中获取信息
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        
String fromServer, fromUser;
boolean sbye = false;
boolean ubye = false;


System.out.print("Client input:");
fromUser = stdIn.readLine();
        while( true )  
{
if( ubye == false )
{
out.println(fromUser);
out.flush();
//System.out.println("Client: " + fromUser);
if (fromUser.equals("Bye."))
ubye = true;
}


if( sbye == false )
{
fromServer = in.readLine();
System.out.println("from Server: " + fromServer);
if (fromServer.equals("Bye."))
sbye = true;
}


if( ubye == false )
{
System.out.print("Client input:");
fromUser = stdIn.readLine();
}


if( ubye == true && sbye == true )
break;
        }


        out.close();
        in.close();
        stdIn.close();
        client.close();
    }
}

客户端代码:

import java.net.*;
import java.io.*;


public class SingleTalkServer
{
    public static void main(String[] args) throws IOException
{


        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(1);
        }


        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();  //程序将在此等候客户端的连接
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }
System.out.println("Accept OK!");


        //打开输入/输出流
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);  //auto flush
        BufferedReader in = new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream()));


//从标准输入流(键盘)中获取信息
        BufferedReader sin = new BufferedReader( new InputStreamReader( System.in ) );


boolean  sinbye = false;
boolean  inbye = false;
String sinputLine, inputLine;
        
        inputLine = in.readLine();
System.out.println( "from Client: " + inputLine );


System.out.print("Server input:");
sinputLine = sin.readLine();


        while( true )
{
if( sinbye == false )
{
out.println(sinputLine);
out.flush();
//System.out.println("Server: " + sinputLine);


if (sinputLine.equals("Bye."))
sinbye = true;
}


if( inbye == false )
{
inputLine = in.readLine();
System.out.println( "from Client: " + inputLine );


if (inputLine.equals("Bye."))
inbye = true;
}


if( sinbye == false )
{
System.out.print("Server input:");
sinputLine = sin.readLine();
}


if( sinbye == true && inbye == true )
break;
        }


        out.close();
        in.close();
sin.close();


        clientSocket.close();
        serverSocket.close();
    }
}

猜你喜欢

转载自blog.csdn.net/code_dreamers/article/details/62236025