网络编程——TCP程序

TCP 协议 的 C/S程序

我们需要使用到两个类来编写TCP协议的C/S程序,双方使用socket(套接字,通信端点)进行交流:

  • ServerSocket:搭建服务器
  • Socket:搭建客户端

ServerSocket

用于创建服务器。创建完毕后, 会绑定一个端口号。注意:参数port的范围是: 0-65535 (建议1025-65535)

然后此服务器可以等待客户端连接。Socket accept():此方法会导致线程的阻塞! 直到一个新的客户端连接成功, return Socket对象后, 线程在继续执行。

每连接一个客户端 , 服务器就会得到一个新的Socket对象, 用于跟客户端进行通信 .

close():释放占用的端口号 , 关闭服务器.

public class SocketDemo {
	public static void main(String[] args) throws IOException {
		//搭建服务器
		ServerSocket server = new ServerSocket(55565);
		System.out.println("服务器搭建完成");
		//等待客户端连接
		Socket socket = server.accept();
        System.out.println("客户端已连接");
	}
}

 

之后开启客户端:

public class ClientDemo {
	public static void main(String[] args) throws UnknownHostException, IOException {
		//客户端连接
        Socket socket = new Socket("localhost",55565);
	}
}

之后想要接收发送消息就可以使用输入输出流:

  • OutputStream getOutputStream(); 返回的是 , 指向通信的另一端点的输出流
  • InputStream getInputStream();返回的是 , 指向通信的另一端点的输入流

一个简单示例:服务器向客户端发送消息

public class SocketDemo {
	public static void main(String[] args) throws IOException {
		//搭建服务器
		ServerSocket server = new ServerSocket(55564);
		System.out.println("服务器搭建完成");
		//等待客户端连接
		Socket socket = server.accept();
		System.out.println("客户端已连接");
		//新建一个输出流
		OutputStream os = socket.getOutputStream();
		//将输出流转换为打印流
		PrintStream ps = new PrintStream(os);
		ps.println("欢迎连接服务器!");
	}
}
public class ClientDemo {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("localhost",55564);
		//新建一个输入流
		InputStream is = socket.getInputStream();
		//将输入字节流转换为字符流然后利用缓冲流输出
		BufferedReader br = new BufferedReader(new InputStreamReader(is));
		String text = br.readLine();
		System.out.println("客户端接收到的内容为:"+text);
	}
}

同样,客户端也可以向服务器发送消息。

但是要注意:在网络编程时, 获取输入输出流的操作 ,对于客户端与服务器来说是相对的。

所以在使用时, 需要注意以下一点规则: 客户端与服务器获取流的顺序必须是相反的:

例如:客户端先得到了输入流 , 那服务器必须先获取输出流

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值