Java网络编程之Socket编程

Socket编程

下图是基于TCP协议的客户机与服务器通信逻辑.客户机使用Socket类型的套接字与服务器会话,服务器则需要使用ServerSocket类型的套接字侦听网络连接,再使用Socket类型的套接字与客户机会话.会话都是通过基于套接字构建的输入流与输出流进行的.

在这里插入图片描述
在这里插入图片描述

客户端代码:

// TODO Auto-generated method stub
		Socket clientSocket=null;
		BufferedReader in=null;
		BufferedWriter out=null;
		try{
		clientSocket=new Socket();
		SocketAddress remoteAddr=new InetSocketAddress("192.168.52.1",5000);
		System.out.println("1.创建客户机套接字成功!");
		
		clientSocket.connect(remoteAddr);//访问服务器指定的地址和端口
		System.out.println("2.客户机连接服务器localhost端口5000成功!");
		System.out.println("客户机使用的地址端口:"+clientSocket.getLocalSocketAddress());
		
		in=new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
	    out=new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
		String sendStr="你好!";
		out.write(sendStr);
		out.newLine();
		out.flush();
		System.out.println("3.1向服务器发送字符串成功!"+sendStr);
		String revStr=in.readLine();
		System.out.println("3.2从服务器接收回送字符串成功!"+revStr);
		}catch(IOException e){
			System.out.println("异常信息:"+e.getMessage());
		}
		try{
			if(in!=null) in.close();
			if(out!=null) out.close();
			if(clientSocket!=null) clientSocket.close();
		}catch(IOException e){
			System.out.println("异常信息:"+e.getMessage());
		}
	}

服务器代码:

// TODO Auto-generated method stub
		BufferedReader in=null;
		BufferedWriter out=null;
		ServerSocket listenSocket=null;
		Socket clientSocket=null;	
		try {
			listenSocket = new ServerSocket();
			SocketAddress serverAddr=new InetSocketAddress("192.168.52.1", 5000);
			listenSocket.bind(serverAddr);//绑定服务器的工作地址和端口
			System.out.println("1.服务器启动成功!开始在localhost的5000端口侦听连接...");
			clientSocket=listenSocket.accept();
			in=new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
		    out=new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
		    String recvStr=in.readLine();
		    System.out.println("3.1服务器收到字符串:"+recvStr);
		    out.write(recvStr);
		    out.newLine();
		    out.flush();
		    System.out.println("3.2服务器回送字符串成功:"+recvStr);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("异常信息:"+e.getMessage());
		}
        //关闭套节字和流
		try{
			if(in!=null) in.close();
			if(out!=null) out.close();
			if(listenSocket!=null) listenSocket.close();
			if(clientSocket!=null) clientSocket.close();
		}catch(IOException e){
			System.out.println("异常信息:"+e.getMessage());
		}
	}

注意:
1.网络编程涉及到图形界面时,一定要将accept函数放到子线程中,避免卡住UI线程
2.readline函数是一个阻塞函数,只有遇到‘\r’或者’\n’才会返回读取的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值