Java(十)网络:C/S的TCP通信


一、同一台电脑上

因为是同一台机子,所以只需要client指定一下本机ip和端口,server默认读取本机的。

1.Server

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static void main(String[] args) throws Exception {
		
		// client发送的内容
		String clientSentence;
		// 从server收到的内容
		String serverSentence;
		
		// server的ServerSocket,端口号为8000
		ServerSocket serverSocket = new ServerSocket(8000);
				
		Socket connectionSocket = serverSocket.accept();
		
		// 输出流
		DataOutputStream douts = new DataOutputStream(connectionSocket.getOutputStream());
		// 输入流
		InputStreamReader insrClient = new InputStreamReader(connectionSocket.getInputStream());
		BufferedReader brClient = new BufferedReader(insrClient);
		
		while(true) {	
			// 从client收到的内容
			clientSentence = brClient.readLine();
			System.out.println("Client:" + clientSentence);
			
			// 将server的serverSentence发送
			serverSentence = clientSentence.toUpperCase() + "\n";
			douts.writeBytes(serverSentence);
		}
	}
}

2.Client

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class Client {
	public static void main(String[] args) throws Exception {
		// 从client收到的内容
		String clientSentence;
		// server发送的内容
		String serverSentence;
		
		// client的Socket,地址就是本机,端口8000.
		Socket clientSocket = new Socket(InetAddress.getLocalHost(), 8000);
	
		// cilent输入的方式
		Scanner scanner = new Scanner(System.in);
		
		while(scanner.hasNextLine()) {
			
			// 输出流
			DataOutputStream douts = new DataOutputStream(clientSocket.getOutputStream());
			
			// 输入流 
			InputStreamReader insrServer = new InputStreamReader(clientSocket.getInputStream());	
			BufferedReader brServer = new BufferedReader(insrServer);
			
			// 将client的clientSentence发送
			clientSentence = scanner.nextLine();
			douts.writeBytes(clientSentence + "\n");
			
			// 从server收到的内容
			serverSentence = brServer.readLine();
			System.out.println("Server:" + serverSentence);
			
		}
		clientSocket.close();
    }
}

二、两台电脑上

跨电脑的话就得指定一个ip了,这个ip是server机的ip本机地址(通过ipconfig查看),然后client机发往这个ip地址。

PS:server机指定的ip必须是自身的ip,不能是随便指定别的,不然会报错java.net.BindException

1.Server

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static void main(String[] args) throws Exception {
		
		String clientSentence;
		String serverSentence;
		
		// 这个ip地址是server机的网络地址
		InetAddress inetAddress = InetAddress.getByName("192.168.1.102");
		
		// server的ServerSocket
		ServerSocket serverSocket = new ServerSocket(8000, 100, inetAddress);
				
		Socket connectionSocket = serverSocket.accept();
		
		// 输出流
		DataOutputStream douts = new DataOutputStream(connectionSocket.getOutputStream());
		// 输入流
		InputStreamReader insrClient = new InputStreamReader(connectionSocket.getInputStream());
		BufferedReader brClient = new BufferedReader(insrClient);
		
		while(true) {	
			// 从client收到的内容
			clientSentence = brClient.readLine();
			System.out.println("Client:" + clientSentence);
			
			// 将server的serverSentence发送
			serverSentence = clientSentence.toUpperCase() + "\n";
			douts.writeBytes(serverSentence);
		}
	}
}

2.Client

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class Client {
	public static void main(String[] args) throws Exception {
		
		String clientSentence;
		String serverSentence;
		
		// 这个要发往的server机ip
		InetAddress inetAddress = InetAddress.getByName("192.168.1.102");
		
		// client的Socket
		Socket clientSocket = new Socket(inetAddress, 8500);
	
		// cilent输入的方式
		Scanner scanner = new Scanner(System.in);
		
		while(scanner.hasNextLine()) {
			
			// 输出流
			DataOutputStream douts = new DataOutputStream(clientSocket.getOutputStream());
			
			// 输入流 
			InputStreamReader insrServer = new InputStreamReader(clientSocket.getInputStream());	
			BufferedReader brServer = new BufferedReader(insrServer);
			
			// 将client的clientSentence发送
			clientSentence = scanner.nextLine();
			douts.writeBytes(clientSentence + "\n");
			
			// 从server收到的内容
			serverSentence = brServer.readLine();
			System.out.println("Server:" + serverSentence);
			
		}
		clientSocket.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值