Socket 简单实现服务器和客户端

首先这只是简单的 socket

直接代码:服务器代码

package SocKet;

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.nio.charset.Charset;


public class Server {
	

	private ServerSocket ss;
	
	private InputStreamReader inputStreamReader; 
	
	private BufferedReader bufferedReader;
	
	public void server(){

		try {
			//<span style="color:#FF6666;">让服务器端程序开始监听来自9000端口的客户端请求</span><span style="color:#3333FF;">端口号是我随便写的 ,没被占用即可。我也不太清楚怎么检测端口号,会的希望留言</span>。
			if (ss==null) {
				 ss = new ServerSocket(9000);
				 System.out.println("服务器启动...");
			}
			
			//服务器无穷的循环等待客户端的请求
			while(true){	
			/*
			 *accept()方法会在等待用户的socket连接时闲置着,当用户链接
			 *上来时,此方法会返回一个socket(在不同的端口上)以便与客户端
			 *通信。Socket与ServerSocket的端口不同,因此ServerSocket可以
			 *空闲出来等待其他客户端
			 */
			//这个方法会停下来等待要求到达之后再继续
			Socket s = ss.accept();
			
			inputStreamReader = new InputStreamReader(s.getInputStream());
			bufferedReader = new BufferedReader(inputStreamReader);
			
			String request = bufferedReader.readLine();
            
			System.out.println("接收到了客户端的请求:"+request);
			//PrintWriter printWriter = new PrintWriter(s.getOutputStream());
                        //<span style="color:#3333FF;">同样解决乱码问题</span> 
 <span style="color:#FF0000;">                       PrintWriter output = new PrintWriter(new OutputStreamWriter(s.getOutputStream(),"UTF-8"),true);</span>
			String advice = "在哪呢?";
			output.println(advice);
			output.close();
			
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	
	public static void main(String[] args) {
		Server server = new Server();
		server.server();
	}
	
	
}


客户端代码:
package SocKet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.Charset;

public class Scoket {

	 public void go() throws UnknownHostException, IOException
	 {
		 //获得地址/端口
		 Socket socket=new Socket("127.0.0.1", 9000);
		 //客户端获得的数据发送到服务器
		 PrintWriter printwrite=new PrintWriter(socket.getOutputStream());
		 System.out.println("正在建立连接....");
		 
		 //printwrite.println("sdfsdf");
		 printwrite.println("我的家乡");
		 printwrite.flush();
		 //客户端接收数据时设置编码方式:<span style="color:#33CC00;">可以解决乱码问题</span>
		<span style="color:#FF0000;"> InputStreamReader isr=new InputStreamReader(socket.getInputStream(),"UTF-8");</span>
		 
		// BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));

		 BufferedReader bf=new BufferedReader(isr);
		 String news=bf.readLine();
		 System.out.println("服务器的得到的数据是:--"+news);
		 bf.close(); 
	 }
	 public static void main(String[]args) throws UnknownHostException,IOException
	 {
		 Scoket s=new Scoket();
		 s.go();
	 }
}
是用步骤:我是在自己的 本机上测试的;工具就是eclipse

首先创建两个类 :server.java 和 Scoket.java代码如上

先运行 Server类  运行服务器 控制台显示如下:


接着 运行 Scoket.java 注意什么也不要做 直接切换到Scoket.java类中运行

服务器显示如下:


客户端控制台显示如下:


在控制台上可以切换显示不同类的控制,也就是eclipse 同时在运行着两个类

切换如下:


点击控制台这个按钮即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值