服务器端

package com.thinkvenus.study.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket; /**
* 服务器端线程处理类
*/
public class ThreadServer extends Thread { private Socket socket; public ThreadServer(Socket socket) {
this.socket = socket;
} /**
* 线程执行的操作,响应客户端请求
*/
@Override
public void run() {
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
OutputStream os = null;
PrintWriter pw = null; try {
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String msg;
while((msg = br.readLine()) != null) {
System.out.println("这里是服务器端,客户端说:" + msg);
}
socket.shutdownInput();//关闭输入 //获取输出流,响应客户端的请求
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("欢迎您");
pw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally { //关闭资源
try {
if(pw != null) pw.close();
if(os != null) os.close();
if(br != null) br.close();
if(isr != null) isr.close();
if(is != null) is.close();
if(socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
} }
} }
package com.thinkvenus.study.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; /**
* 基于TCP的socket通信
*/ public class Server { public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("*****************服务端即将启动,等待客户端的连接**********");
int count = 0;
//循环监听客户端的连接
while(true) {
Socket socket = serverSocket.accept();//开始监听
ThreadServer ts = new ThreadServer(socket);
ts.start();
count++;
System.out.println("客户端的数量:"+count);
} } catch (IOException e) {
e.printStackTrace();
} } }

客户端:

package com.thinkvenus.study.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; public class Client { public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流
pw.println("username=aaron; pwd="+Math.random());
pw.flush(); socket.shutdownOutput();//关闭输出
//获取输入流,获取服务器端的响应
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String msg;
while((msg = br.readLine()) != null) {
System.out.println("我是客户端,服务端说:"+ msg);
} //关闭资源
br.close();
isr.close();
is.close();
pw.close();
os.close();
socket.close(); } catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }

最新文章

  1. Class对象即反射
  2. 从零开始学Python04作业思路:模拟ATM电子银行
  3. Xcode 7 App Transport Security has blocked a cleartext HTTP 报错解决办法
  4. 浏览器以外的Javascript
  5. [翻译][MVC 5 + EF 6] 3:排序、过滤、分页
  6. 使用win8.1 x64 office2010 php 使用 pdo_odbc 连接excel失败的问题
  7. Python数据分析扩展库
  8. JavaScript螺纹的问题和答案
  9. asp.net core 运用 Redis 配置步骤
  10. NFS 安装与配置
  11. 浅析Springboot自动配置
  12. 如何查看linux服务器内存使用情况
  13. BFC原理剖析
  14. boost::asio 学习
  15. POJ.3145.Common Substrings(后缀数组 倍增 单调栈)
  16. 关于form表单排版的技巧
  17. 1083. List Grades (25)-简单的排序
  18. pdf阅读器改背景色
  19. python environ PYTHON_EGG_CACHE
  20. java使用AES256解密

热门文章

  1. win10 无法修改默认程序 默认打开方式的解决方法
  2. iOS URL加解密
  3. linux开发基本库
  4. python学习总结------邮件与短信
  5. 一款代码高亮插件 -- SyntaxHighlighter
  6. Browser-Solidity的本地安装及使用介绍
  7. POJ 3858 Hurry Plotter(DP)
  8. [boost-3] 函数对象
  9. 【积累】LinqToSql复合查询结果转DataTable数据
  10. web相关基础知识1