学习笔记_TCP编程,服务端

本文介绍了一种使用Java实现启动TCP服务的方法。通过创建ServerSocket监听特定端口,并为每个连接创建新的线程来处理客户端请求。文章展示了如何设置Socket超时、读取和响应客户端数据。
public void startTcpService(String ip) {

try { InetAddress ipAddress = InetAddress.getByName(ip); tcpServer = new ServerSocket(TCP_SERVER_PORT, 0, ipAddress); tcpServer.setSoTimeout(1000); SocketHandler handler = new SocketHandler(); new Thread(handler).start(); } catch (Exception e) { logger.info("Start tcp service failed. ip = " + ip + ",port=" + TCP_SERVER_PORT, e); } logger.info("Start tcp service on port, ip = " + ip + ",port=" + TCP_SERVER_PORT); } class SocketHandler implements Runnable { @Override public void run() { while (true) { Socket sock = null; try { sock = tcpServer.accept(); sock.setSoTimeout(490); MyTcpSocket mySockThread = new MyTcpSocket(sock); Thread thread = new Thread(pmSockThread); thread.start(); } catch (SocketTimeoutException e) { // do nothing } catch (Exception e1) { logger.info("Init sockt failed. ip=" + ip , e1); } } } }
public class MyTcpSocket implements Runnable {

    private static DebugLog logger ;
//Socket连接
    private Socket sock = null;

    //接收数据缓冲区
    private byte[] dataBuffer = new byte[10240];

    //接收数据缓冲区长度
    private int dataLen = 0;
public MyTcpSocket(Socket sock) {
        logger.info("New Tcp socket inited.");
        this.sock = sock;
    }

    @Override
    public void run() {
        try {
            int bufLen = 1024;
            InputStream inStream = sock.getInputStream();
            OutputStream outStream = sock.getOutputStream();
            buildlinkConnect(outStream);

            byte recvBuf[] = new byte[bufLen];
            int len = 0;
            while (true) {
                try {
                    len = inStream.read(recvBuf, 0, bufLen);
                    printlnFromBytes("recv", recvBuf, len);
}
catch (SocketTimeoutException e1) { len = 0; } if (len > 0 && recvBuf != null) { outStream.write("response"); } } } catch (Exception e) { } finally { closeSocket(); } }

 

转载于:https://www.cnblogs.com/BrokenSwitch/p/9891395.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值