千家信息网

12.5-全栈Java笔记:Java网络编程(三)

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,上节回顾:在学习了Socket在建立客户端和服务器单项通讯中,分别创建独立的Socket,并通过Socket的属性。那么如何将两个Socket进行连接,从而达到客户端和服务器之间建立输入输出流进行通信
千家信息网最后更新 2025年02月07日12.5-全栈Java笔记:Java网络编程(三)

上节回顾:在学习了Socket在建立客户端和服务器单项通讯中,分别创建独立的Socket,并通过Socket的属性。

那么如何将两个Socket进行连接,从而达到客户端和服务器之间建立输入输出流进行通信呢?在上节中我们已经讲到,TCP/IP套接字是最可靠的双向流协议,使用TCP/IP可以发送任意数量的数据。如果发送方和接收方计算机确定好端口,他们就可以通信了,其中的端口用套接字表示。

【示例1】客户端与服务器端双向交流的Socket之服务器端

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[] args) throws Exception {

ServerSocket server=new ServerSocket(8888);

Socket socket=server.accept();

BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

while(true){

String str=in.readLine();

System.out.println("客户端说:"+str);

String str2 = "";

str2 = br.readLine(); //读到\n为止,因此一定要输入换行符!

out.write(str2+"\n");

out.flush();

if(str.equals("end"))

break;

}

in.close();

out.close();

socket.close();

}

}

【示例2】客户端与服务器端双向交流的Socket之客户端

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

public class Client {

static Socket server;

public static void main(String[] args) {

try {

server = new Socket(InetAddress.getLocalHost(), 8888);

BufferedReader in = new BufferedReader(new InputStreamReader(

server.getInputStream()));

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(

server.getOutputStream()));

BufferedReader wt = new BufferedReader(new InputStreamReader(

System.in));

while (true) {

String str = wt.readLine();

out.write(str + "\n");

out.flush();

if (str.equals("end")) {

break;

}

System.out.println("服务器发说:" + in.readLine());

}

out.close();

in.close();

wt.close();

server.close();

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

学习以上程序后,会发现我们必须按照安排好的顺序,服务器和客户端一问一答!不够灵活!!那么如何用多线程来实现更加灵活的双向通讯呢?下节我们继续~





「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

C-手刃移动前端和Web前端

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop




0