TCP实现服务器端接收客户端发送过来的消息。
服务器端:
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
/*
* 服务端接收客户端发送过来的数据
* 建立TCP服务端
* 1.创建socket服务,通过serverSocket对象(服务端必须对外提供一个端口)
* 2.获取连接过来的客户端对象
* 3.通过客户端对象获取socket流,读取客户端发来的数据,
* 并打印在控制台上
* 4.关闭资源。关闭客户端,关闭服务器.因为服务器中保存了客户端对象,所以
* 实际上客户端通过服务器通信还是两个客户端进行通信
*
*/
//1.创建服务器对象
ServerSocket ss=new ServerSocket(10000);
//2.获取连接过来的客户端对象 Socket是客户端套接字
Socket s=ss.accept();//阻塞式
//获取客户端的ip地址
String ip=s.getInetAddress().getHostAddress();
//3.通过socket对象获取输入流,要读取客户端发过来的数据
InputStream is=s.getInputStream();
byte[] buf=new byte[1024];
int len=is.read(buf);
String str=new String(buf, 0, len);
System.out.println(ip+"..."+str);
s.close();
ss.close();
}
}
客户端:
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
public static void main(String[] args) throws UnknownHostException, IOException {
/*
* 建立TCP客户端
* 1.创建TCP客户端的socket服务,使用的是socket对象
* 创建对象时明确连接哪个服务器(通过ip与端口号)
* 2.如果连接成功,数据传输通道已经建立
* 通道相当于socket流,包括输入流和输出流,这里我们需要的是输出流
* getOutputStream():获取输出流
* 3.使用输出流将数据写出
* 4.关闭资源
*/
// 客户端发送到服务器端
//这里面的端口号为指向的服务器的端口号
Socket s=new Socket(InetAddress.getLocalHost(), 10000);
//获取socket流中的输出流
OutputStream os=s.getOutputStream();
//使用输出流将指定的数据写出去
os.write("tcp演示,哥们来了...".getBytes());//因为os为字节流
//关闭资源
os.close();
s.close();
}
}
注意:先执行服务器端,再执行客户端。
运行结果:
在客户端控制台输出: