socket编程服务器向客户端回一个消息,Socket编程客户端和服务端通讯过程

客户端与服务端通讯的原理

a98328b87f4c48d3b44670f231eaa59a.png

代码实现java

一个服务器接收一个客户端的消息

客户端代码web

package demo2;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

public class Client {

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

//经过socket对象向服务器发送请求

Socket socket=new Socket("localhost",2198);

//建立的socket对象是计算机客户端通信的端点

//该通信的端点用于和服务器通信

InputStream is=socket.getInputStream();

OutputStream os=socket.getOutputStream();

//经过输出流将数据发送到通信的另外一端

os.write("你好".getBytes());

while(true){

if(is.available()>0){

byte[] b=new byte[is.available()];

is.read(b);

System.out.println("服务端回复说"+new String(b));

}

}

}

}

服务器代码数组

package demo2;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

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

//建立服务器容器对象,须要监听计算机中的某一个接口

ServerSocket server=new ServerSocket(2198);

//执行accept方法等待客户端链接,该方法是线程阻塞的

//若是没有客户端发送请求,该方法会阻塞当前线程

//若是有客户端发送了请求,该方法会进入执行状态并返回一个Socket对象

//该Socket对象只能用于和发送请求这一客户端进行通信

Socket socket=server.accept();

System.out.println("有客户端链接请求到服务器");

//取出输入流

InputStream is=socket.getInputStream();

OutputStream os=socket.getOutputStream();

//接受数据使用死循环来处理

while(true){

if(is.available()>0){

byte[] b=new byte[is.available()];

is.read(b);

System.out.println("客户端说"+new String(b));

//回复客户端

os.write("你也好".getBytes());

}

}

}

}

一个服务器端能够接收多个客户端请求

客户端代码`服务器

package demo3;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

public class Client {

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

Socket socket=new Socket("localhost",1233);

//发送信息到服务器

OutputStream os=socket.getOutputStream();

InputStream is=socket.getInputStream();

//发送一条信息

os.write("你好我是客户端".getBytes());

while(true){

if(is.available()>0){

byte[] b=new byte[(is.available())] ;

is.read(b);

System.out.println("服务器说"+new String(b));

}

}

}

}

多线程代码多线程

package demo3;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

public class ServerReaderThread extends Thread {

//定义一个Socket对象经过构造方法来赋值将main主线程的Socket对象传进来

private Socket socket;

public ServerReaderThread(Socket socket) {

this.socket=socket;

}

@Override

public void run() {

//获取套接字中的输入流

try {

InputStream is=socket.getInputStream();

OutputStream os=socket.getOutputStream();

while(true){

//若是输入流的信息长度大于零

if(is.available()>0){

//定义字节数组用于保存读取出的数据

byte[] b=new byte[is.available()];

is.read(b);//读

System.out.println("客户端说"+new String(b));

//回复

os.write("欢迎光临".getBytes());

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

服务器端代码socket

package demo3;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

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

//建立服务器套接字对象

ServerSocket server=new ServerSocket(1233);

while(true){

System.out.println("服务器已开启正在等待客户端链接。。。。");

//接受新的客户端请求

Socket socket=server.accept();

System.out.println("有新的客户端连接到了服务器");

//开启一条新的线程用来接收该客户端发送的信息

ServerReaderThread readThread=new ServerReaderThread(socket);

//开始线程

readThread.start();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值