Socket_TCP 服务端编写

本文详细介绍了网络通信服务端的实现,包括创建ServerSocket、等待客户端连接、处理客户端请求等步骤,并提供了验证服务端功能的方法。同时,阐述了客户端如何通过telnet命令与服务端进行通信,实现简单的消息交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.ct.server;

import java.net.ServerSocket;
import java.net.Socket;

/** 
 * @author Chalmers
 * @version 创建时间:2015年12月14日 下午7:14:14 
 */
/**
 * 网络通信服务端,运行程序,等待客户端的连接
 */
/**
 * 在服务端中,只需要指定端口,表示该端口已经被该程序占用 而不需要写网址,因为服务端在此电脑上,可以通过电脑ip和服务端端口来连接该程序
 */
public class MyServer {

	public static void main(String[] args) {
		ServerSocket server = null;
		Socket socket = null;

		try {
			// 建立一个ServerSocket对象
			// 数字表示服务端占用的端口
			// 端口范围为0~65535
			/*
			 *创建服务器对象的时候是不需要使用地址的,这个与客户端对象的创建不同。 
			 */
			server = new ServerSocket(9090);
			while (true) {

				System.out.println("服务器已经启动,在9090端口正在等待连接~~~");

				// 开始等待客户端的连接
				// 如果有客户端连上,就会接收到客户端套接字对象
				// 如果没有,则等待
				socket = server.accept();

				//线程,可以用多个客户端连接服务端
				ClientThread ct = new ClientThread(socket);
				ct.start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

 

 

 

 

package com.ct.server;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.SocketAddress;

/**
 * @author Chalmers
 * @version 创建时间:2015年12月14日 下午8:49:32
 */
public class ClientThread extends Thread {

	private Socket socket;

	//服务器
	public ClientThread(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		super.run();
		try {
			// 获得远程客户端地址
			// 如果此行代码在服务端写,则获得客户端地址
			// 如果在客户端写,则获得服务端地址
			SocketAddress addr = socket.getRemoteSocketAddress();
			// 获取本地服务器地址
			// 与上面相反
//			SocketAddress addr2 = socket.getLocalSocketAddress();

			System.out.println("连上一个客户端: " + addr);
//			System.out.println("客户端: " + addr2);

			// 通过socket对象获得输出流
			OutputStream os = socket.getOutputStream();
			// 包装成字符流
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));

			// 向客户端写数据
			String msg = "Hello Boy!\n";
			bw.write(msg);
			//注意要写
			bw.flush();

			// 通过socket获得输入流
			InputStream is = socket.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			while (true) {
				// 读取一行数据
				msg = br.readLine();
				//写这个是想让服务端正常退出
//				if (msg == null) {
//					break;
//				}
				System.out.println("客户端发送的数据: " + msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

 

因为要测试多个客户端的连接,所以用了线程。

 

 

服务端写好了,但没写客户端,该如何验证呢??

可以用下面的方法:

启动cmd后,输入 telnet 127.0.0.1 9090(你设置的服务端的端口号)。

如果telnet不能打开怎么办??

我的是win8系统,所以就讲解win8的做法,其他操作系统也差不太多。

我的电脑-->属性-->控制面板主页-->程序和功能-->启用或关闭windows功能-->选择开启Telnet客户端功能   就好了。

 

测试时,我启动了两个客户端,截图如下

 


 

所以便可验证服务端编写完成。

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值