Java Socket 编程学习(1)

Java Socket 例子,没有用第三方框架,直接使用JDK自带API,有关详细API可以查看JDK

客户端场景:

从终端读取用户输入,发送给服务器端,同时接受服务器端的响应,单线程

客户端代码:

package yang.socket.tcp;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.Socket;

public class ClientCode {

	public static InetAddress addr = null;

	public static int port;

	public static void main(String[] args) throws IOException

	{

		port = 3333;

		addr = InetAddress.getByName("localhost");

		// 创建一个流套接字并将其连接到指定 IP 地址的指定端口号
		Socket socket = new Socket(addr, port);

		System.out.println("socket = " + socket);

		//创建流用来读取套接字的输入输出
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

		PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
		
		BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));

		while(true){
			
			//从系统终端读取数据
			String message = sysin.readLine();
			//用套接字输出流向服务器发送数据
			out.println(message);
			
			//接受服务器返回的消息
			String str = in.readLine();

			System.out.println(str);
			
			if(message.equals("end")){
				
				System.out.println("Message Transport is over!");
				
				break;
			}
		}

		//关闭套接字
		System.out.println("close the Client socket and the io.");

		socket.close();

	}
}



服务器端场景:

监听并接受客户端套接字连接,读取客户端发送的消息,同时给客户端返回响应

服务器端代码:

package yang.socket.tcp;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.InetAddress;
import java.net.ServerSocket;

import java.net.Socket;

public class ServerCode {

	public static InetAddress addr = null;

	public static int port;

	public static void main(String[] args) throws IOException

	{

		port = 3333;

		addr = InetAddress.getByName("localhost");

		// 创建绑定到特定端口的服务器套接字
		ServerSocket s = new ServerSocket(port);

		System.out.println("The Server is start: " + s);

		//侦听并接受到此套接字的连接,接受客户端的连接
		Socket socket = s.accept();

		System.out.println("Accept the Client: " + socket);

		//创建流用于读取输入输出
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

		PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

		while (true){

			//从套接字流中的读取客户端发送来的消息
			String str = in.readLine();

			System.out.println("Server reveived message : " + str);
			
			//套接字输出,告诉客户端接受到消息
			out.println(str + " Has Recevied");

			if (str.equals("end")){
				
				System.out.println("Message Transport is over!");

				break;

			}

		}

		//关闭套接字
		System.out.println("close the Server socket and the io.");

		socket.close();

		s.close();

	}
}


测试:

运行服务器:

The Server is start: ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=3333]


运行客户端

socket = Socket[addr=localhost/127.0.0.1,port=3333,localport=54282]


服务器端显示:

The Server is start: ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=3333]
Accept the Client: Socket[addr=/127.0.0.1,port=54282,localport=3333]


在客户端输入消息

socket = Socket[addr=localhost/127.0.0.1,port=3333,localport=51840]
nihao this is client test
nihao this is client test Has Recevied
my name is yang
my name is yang Has Recevied
end
end Has Recevied
Message Transport is over!
close the Client socket and the io.

服务端显示:

The Server is start: ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=3333]
Accept the Client: Socket[addr=/127.0.0.1,port=51840,localport=3333]
Server reveived message : nihao this is client test
Server reveived message : my name is yang
Server reveived message : end
Message Transport is over!
close the Server socket and the io.







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值