Scoket通信

单向通信:服务器端------->客户端

服务器端:

package com.newcapec.scoket;

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

public class TcpServer {
	public static void main(String[] args) throws Exception{
		ServerSocket server =new ServerSocket(8080);
		try {
			System.out.println("服务器已经启动,等待客户消息****");
			Socket client=server.accept();
			try {
				BufferedReader input =new BufferedReader(new InputStreamReader(client.getInputStream()));
				boolean flag=true;
				
				while(flag){
					String line=input.readLine();
					if(line.equals("exit")) {
						flag=false;
						System.out.println("客户不想玩了!");
					}else {
						System.out.println("客户端说:"+ line);
					}
				}
			} finally {
				client.close();
			}
		}finally {
			server.close();
		}
	}
}

客户端:

package com.newcapec.scoket;

import java.io.PrintWriter;
import java.net.Socket;

import java.util.*;

public class TcpClient {
	public static void main(String[] args)throws Exception {
		Socket client=new Socket("192.168.156.130",9999);
		try {
			PrintWriter output=new PrintWriter(client.getOutputStream(),true);
			
			Scanner sc=new Scanner(System.in);
			System.out.println("*****请输入您想说的话*******");
			String words;
			
			while(sc.hasNext()) {
				words=sc.nextLine();
				
				output.println(words);
				
				System.out.println("客户端发送的消息为:"+words);
			}
		}finally {
			client.close();
		}
	}
}

 

 


双向通信(用多线程):

服务器端:

package com.newcapec.scoket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server2 implements Runnable{
	private Socket socket = null;
	private PrintWriter printWriter;//文件的输出流对象,用于指定客户端进行消息发送的实现
	private Scanner scanner;//键盘类,用于获得用户在键盘输入的消息内容
	
	public Server2(Socket socket) throws IOException {
		this.socket = socket;
		scanner = new Scanner(System.in);
		System.out.println("请服务器发送消息");
		printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
	}
	@Override
	//run方法用于服务器端给客户端发送消息
	public void run() {
		String msg;//要发送的消息
		try {
			while((msg = scanner.nextLine())!=null) {
				if(msg.equals("88")) {
					//isClosed:用于判断socket对象是否已经关闭掉,若关闭了,就返回true,反之为false
					if(!socket.isClosed()) {
						System.out.println("服务器手动与客户端断开连接");
						socket.close();
					}
					break;
				}
				printWriter.println(msg);
			}
		}catch (IOException io) {
		System.out.println("关闭socket出现问题");
		}catch (Exception e) {
			System.out.println("异常关闭客户端");
		}
	}
	public static void main(String[] args) throws IOException {
		ServerSocket serverSocket = new ServerSocket(9999);
		System.out.println("正在监听端口号9999");
		Socket socket;
		BufferedReader bufferedReader;
		while(true) {
			socket = serverSocket.accept();
			System.out.println("一个客户端已经连接");
			Thread writerThread = new Thread(new Server2(socket));
			writerThread.start();
			//用于接收客户端发送过来的消息内容的实现
			bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String msg;//客户端发送过来的信息
			try {
				while ((msg = bufferedReader.readLine()) != null) {
					System.out.println("客户端:" + msg);
				} 
				serverSocket.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			System.out.println("已断开连接");
		}
	}	
}

 

客户端:

package com.newcapec.scoket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client implements Runnable{ 
	private Socket socket = null;
	private PrintWriter printWriter; 
	private Scanner scanner;
	public Client(Socket socket) throws IOException {
		this.socket = socket;
		scanner = new Scanner(System.in);
		System. out.println("请客户端发送消息:");
		printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
	}
	public void run() {
		String msg;//要发送的信息 
		try {
			while ((msg = scanner.nextLine()) != null) {
				printWriter.println(msg);
			}
		} catch (Exception e) { 
			e.printStackTrace();
		}
	}
	public static void main(String[] args) throws IOException { 
		Socket socket = new Socket("192.168.157.98",3333);
		System.out.println ("连接服务器成功!如果想断开连接请输入88 (回车)"); 
			Thread tl= new Thread(new Client(socket)); 
			tl.start();
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream ()));
		try {
			String msg;//服务器发过来的信息
			while((msg=bufferedReader.readLine())!=null) {
				System.out.println("##服务器:"+msg);
			}
		}catch(IOException e) {
			System.out.println("警告:断开连接!");
			try {
				if(!socket.isClosed()) {
					socket.close();
				}
			}catch(IOException e1) {
				System.out.println("读取线程:关闭socket出现错误");
			}
		}
		System.exit(1);//将jvm中断退出
	}
}

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱吃狮子头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值