关于Socket一对一通信

客户端:

public class Client {

      public static void main(String[] args) {

             try {

  // 1.连接到本机,端口号为8080

 Socket connectToServer = new Socket("localhost", 8080);

 // 2.创建输入流对象,将数据输入流连接到socket

 DataInputStream inFromServer = new DataInputStream(

connectToServer.getInputStream()); 

// 3.创建输出流对象,将数据输出流连接到socket

DataOutputStream outToServer = new DataOutputStream(

connectToServer.getOutputStream());


System.out.println("输入半径数值发送到服务器,输入bye结束");

String outStr, inStr;

boolean goon = true;

// 4.等待用户输入, 将输入保存到buf这个对象中

BufferedReader buf = new BufferedReader(

new InputStreamReader(System.in));


// 5.反复读用户的数据病计算

while (goon) { 

//5.1读入用户的输入

    (1) outStr   =   buf . readLine () ;

// 5.2写到socket中

outToServer.writeUTF(outStr);

// 5.3清空缓冲区,立即发送

outToServer.flush();

// 5.4从Socket中读数据

    (4) inStr   =   inFromServer . readUTF () ;

 

if (!inStr.equals("bye"))

System.out.println("从服务器返回的结果是:" + inStr);

else

goon = false;

}

inFromServer.close();

outToServer.close();

connectToServer.close();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

 



服务器端:

package it.java.network.programming;

 

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

 

public class Server {

public static void main(String[] args) {

try {

System.out.println("等待客户端的连接"); 

// 1.调用ServerSocket类,以8000端口号为参数来创建一个ServerSocket对象——serverSocket

// 注意:端口号要选取1024-65536之间的端口(1-1023端口已被系统占用)

ServerSocket serverSocket = new ServerSocket(8080)


/*

* 2.调用accept()方法,一直处于阻塞状态,直到接收到来自Client的连接请求,此时accept()方法将

 * 返回一个新建的Socket类的对象(本例使用的新建对象是connectToClient)

 * connecToClient的作用:和客户机建立的通信链路在服务程序内的通信端点。

 */

Socket connectToClient = serverSocket.accept();

// 3.获取来自客户端的IP地址

System.out.println("连接请求来自"+ 

connectToClient.getInetAddress().getHostAddress());

 // 4.创建输入流对象,将数据输入流连接到socket

DataInputStream inFromClient = new DataInputStream(

connectToClient.getInputStream());

 // 5.创建输出流对象,将数据输出流连接到socket

DataOutputStream outToClient = new DataOutputStream(

connectToClient.getOutputStream());

 // 6.使用流对象(inFromClient,outToClient)的方法完成和客户端的数据传输

String str;

double radius, area;

boolean goon = true;

while (goon) {

// 6.1从socket中的输入流对象(inFromClient)读取数据

  (2)str = inFromClient.readUTF();

// 6.2如果字符流不等于bye

if (!str.equals("bye")) {

radius = Double.parseDouble(str);

System.out.println("接收到的半径值为:" + radius);

area = radius * radius * Math.PI;

str = Double.toString(area);

// 6.2.1向socket中写数据

  (3)outToClient.writeUTF(str);

// 6.2.2清空缓冲区立即发送

outToClient.flush();

System.out.println("圆面积" + str + "已经发送");

} else {

goon = false;

outToClient.writeUTF("bye");

outToClient.flush();

}

// 7.服务器端程序关闭和客户端通信的流和通信的Socket

inFromClient.close();

outToClient.close();

serverSocket.close();

}

} catch (IOException e) {

e.printStackTrace();

}

      }

}

 



猜你喜欢

转载自blog.csdn.net/afsdfq/article/details/45602193