java client通信_Socket实现client和server端通信(Java)(转)

转自: https://blog.csdn.net/yayun0516/article/details/50819147

https://www.jianshu.com/p/2d4f223f1462

socket字面意思为插座,打个比喻,当两台电脑需要通讯时,每一台电脑准备好一个网线插口,插上网线,连接成功。同理,当两台计算机应用程序需要连接时,也需要像电脑一样准备好一个网线插口,这个东西在操作系统中叫做socket(套接字),它包含三个概念:(protocol + ip + port)。

概念形象化

socket:火车站

protocol:高铁 动车 特快 普快 绿皮 货运 蒸汽机车

ip:目的地站名

port:站内出站口

这里我们主要实现一下socket通信,socket通信在java中应用十分广泛。比如QQ和MSN等都是基于socket通信的,什么是socket?简单理解socket就是ip+端口。通过实例来观察一下最简单的socket通信是怎么实现的吧。

首先实现server端代码:

packagecom.socket.demo;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.ServerSocket;importjava.net.Socket;public classServer {public static voidmain(String[] args) {try{

ServerSocket serverSocket=new ServerSocket(8888);

System.out.println("----------------服务端执行,開始监听请求----------------");

Socket socket=serverSocket.accept();//開始监听

InputStream inputStream=socket.getInputStream();

BufferedReader bufferedReader=new BufferedReader(newInputStreamReader(inputStream));//获取请求内容

String info;while ((info=bufferedReader.readLine())!=null) {

System.out.println("我是server端,client请求为:"+info);

}//关闭资源

socket.shutdownInput();

bufferedReader.close();

inputStream.close();

socket.close();

serverSocket.close();

}catch(Exception exception){

}

}

}

然后实现client代码:

packagecom.socket.demo;importjava.io.IOException;importjava.io.OutputStream;importjava.io.PrintWriter;importjava.net.Socket;importjava.net.UnknownHostException;public classClient {public static voidmain(String[] args) {try{//发送到8888端口

Socket socket=new Socket("127.0.0.1", 8888);//输出流

OutputStream outputStream=socket.getOutputStream();

PrintWriter printWriter=newPrintWriter(outputStream);

printWriter.write("server端你好,我是client。");

printWriter.flush();//关闭资源

printWriter.close();

outputStream.close();

socket.close();

}catch(UnknownHostException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}

}

结构如图:

3398138

然后我们首先运行服务器端:(顺序不能颠倒哦)

3398138

然后启动客户端:

3398138

这里可以看到,客户端将信息发送到服务器端,服务器端接收到信息后将信息在控制台进行输出。好了,最简单的一个socket通信就实现了。

总结一下如下图:

3398138

一些函数:

TTransport transport = new TSocket(ip,port) 传的就是ip地址和端口号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解了。针对你的问题,我可以为你提供一些基于Java Socket的多客户Client-Server聊天程序的实现步骤。 步骤如下: 1. 创建一个ServerSocket对象,指定口号,用于监听客户的连接请求。 2. 创建一个Socket对象,指定服务器的IP地址和口号,连接到服务器。 3. 在客户和服务器之间建立输入输出流,用于数据的传输。 4. 客户向服务器发送数据,服务器接收数据并处理。 5. 服务器向客户发送数据,客户接收数据并处理。 6. 当客户和服务器之间的通信结束时,关闭输入输出流和Socket对象。 7. 服务器继续监听客户的连接请求,直到程序结束。 具体的实现步骤可以参考以下代码: Client.java ``` import java.net.*; import java.io.*; public class Client { public static void main(String[] args) { try { // 连接服务器 Socket socket = new Socket("127.0.0.1", 8080); System.out.println("连接服务器成功!"); // 创建输入输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); OutputStream outputStream = socket.getOutputStream(); PrintWriter writer = new PrintWriter(outputStream); InputStream inputStream = socket.getInputStream(); BufferedReader input = new BufferedReader(new InputStreamReader(inputStream)); // 向服务器发送数据 String line = null; while ((line = reader.readLine()) != null) { writer.println(line); writer.flush(); if (line.equals("exit")) { break; } } // 关闭输入输出流和Socket对象 input.close(); outputStream.close(); writer.close(); reader.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` Server.java ``` import java.net.*; import java.io.*; public class Server { public static void main(String[] args) { try { // 创建ServerSocket对象,指定口号 ServerSocket serverSocket = new ServerSocket(8080); System.out.println("服务器已经启动,等待客户连接..."); while (true) { // 监听客户的连接请求,等待连接 Socket socket = serverSocket.accept(); System.out.println("客户连接成功,IP地址为:" + socket.getInetAddress()); // 创建输入输出流 InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); OutputStream outputStream = socket.getOutputStream(); PrintWriter writer = new PrintWriter(outputStream); // 读取客户发送的数据 String line = null; while ((line = reader.readLine()) != null) { System.out.println("客户发送的数据:" + line); writer.println("服务器已经接收到数据:" + line); writer.flush(); if (line.equals("exit")) { break; } } // 关闭输入输出流和Socket对象 reader.close(); outputStream.close(); writer.close(); socket.close(); } } catch (Exception e) { e.printStackTrace(); } } } ``` 这里是一个简单的Java Socket多客户Client-Server聊天程序的实现。你可以根据你的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值