java Socket编程-基于TCP
package com.wzy.Test; 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; /**
*
* @author wzy
*服务器线程处理类
*/
public class ServerThread extends Thread {
//和本线程相关的Socket
Socket socket; public ServerThread(Socket socket){
this.socket = socket;
}
public void run(){
PrintWriter pw=null;
OutputStream out=null;
BufferedReader br=null ;
InputStreamReader isr=null;
InputStream is=null;
try{
is = socket.getInputStream();//字节输入流
//将字节流转换为字符流
isr = new InputStreamReader(is);
//为输入流添加缓冲
br = new BufferedReader(isr);
String info = "";
String info1 = null;
while((info = br.readLine())!=null){
//循环读取客户端信息
System.out.println("服务器接收到客户端的信息为: "+info);
info1 = info;
} System.out.println(info1);
//关闭输入流
socket.shutdownInput();
//4获取输出流,响应客户端的请求
out = socket.getOutputStream();
pw = new PrintWriter(out);
pw.write("你好,客户端,我是服务器!");
pw.flush();
//5.关闭资源 }
catch(Exception e){
e.printStackTrace(); }
finally{
try{
if(pw!=null){pw.close();}
if(out!=null){out.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.wzy.Test; 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.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author wzy
*服务器
*/ public class Server {
public static void main(String[] args) {
int count = ;
//for(int a = 0;a<5;a++){
try {
//1.创建一个服务器端socket,即ServerSocket,指定绑定的端口,并监听
ServerSocket serverSocket = new ServerSocket();//监听8888端口
System.out.println("服务器等待客户端连接....");
//2.调用accept开始监听,等待客户端连接
Socket socket =null;
while(true){
socket = serverSocket.accept();//接受
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
System.out.println("客户连接数量:"+(++count));
InetAddress address = socket.getInetAddress();
System.out.println("客户端ip:"+address.getHostAddress()); }/*
//3.获取输入流,并读取客户端信息
InputStream is = socket.getInputStream();//字节输入流
//将字节流转换为字符流
InputStreamReader isr = new InputStreamReader(is);
//为输入流添加缓冲
BufferedReader br = new BufferedReader(isr);
String info = "";
String info1 = null;
while((info = br.readLine())!=null){
//循环读取客户端信息
System.out.println("服务器接收到客户端的信息为: "+info);
info1 = info;
} System.out.println(info1);
//关闭输入流
socket.shutdownInput();
//4获取输出流,响应客户端的请求
OutputStream out = socket.getOutputStream();
PrintWriter pw = new PrintWriter(out);
pw.write("你好,客户端,我是服务器!");
pw.flush();
//5.关闭资源
pw.close();
out.close();
br.close();
isr.close();
is.close();
socket.close();
serverSocket.close();*/
} catch (Exception e) { e.printStackTrace();
}
}
//}
}
package com.wzy.Test; 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; /**
*
* @author wzy
*客户端
*/
public class Client {
public static void main(String[] args) { try {
//1.创建客户端socket,指定服务器地址和端口
Socket socket = new Socket("127.0.0.1", );
//2.获取输出流,向服务器发送信息
OutputStream os = socket.getOutputStream();//字节输出流
PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流
pw.write("hello,服务器!!!,我是客户端"); pw.flush();//刷新缓存
socket.shutdownOutput();//关闭输出流
//3.获取输入流,读取服务器的响应
InputStream in = socket.getInputStream();
InputStreamReader inr = new InputStreamReader(in);
BufferedReader brr = new BufferedReader(inr);
String info = null;
while((info =brr.readLine())!=null){
System.out.println("客户端接到服务器的消息: "+info); }
brr.close();
inr.close();
in.close(); //4.关闭资源
pw.close();
os.close();
socket.close(); } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java Socket编程-基于TCP的更多相关文章
- Java 网络编程 -- 基于TCP 模拟多用户登录
Java TCP的基本操作参考前一篇:Java 网络编程 – 基于TCP实现文件上传 实现多用户操作之前先实现以下单用户操作,假设目前有一个用户: 账号:zs 密码:123 服务端: public c ...
- Java Socket实现基于TCP和UDP多线程通信
一.通过Socket实现TCP编程 1.1 TCP编程 TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据.基于TCP协议实现网络通信的类有客户端的Socket类和服务器端的ServerSo ...
- java Socket编程-基于UDP
package com.wzy.UDPTest; import java.net.DatagramPacket; import java.net.DatagramSocket; import java ...
- Java 网络编程 -- 基于TCP实现文件上传
Java TCP 操作基本流程 一.创建服务器 1.指定端口, 使用serverSocket创建服务器 2.阻塞式连接 accept 3.操作:输入流 输出流 4.释放资源 二.创建客户端 1.使用S ...
- Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊
分析: 聊天室需要多个客户端和一个服务端. 服务端负责转发消息. 客户端可以发送消息.接收消息. 消息分类: 群聊消息:发送除自己外所有人 私聊消息:只发送@的人 系统消息:根据情况分只发送个人和其他 ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- JAVA Socket 编程学习笔记(一)
1. Socket 通信简介及模型 Java Socket 可实现客户端--服务器间的双向实时通信.java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的cli ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- 如何为可扩展系统进行Java Socket编程
从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...
随机推荐
- PHP工作笔记:数组转字符串与字符串转数组
一个数组要入库,发现不可以,特定用函数转为字符串入库 $data = array( 'http://img4.bitautoimg.com/autoalbum/files/20110420/734/2 ...
- 【JAVA并发编程实战】9、锁分段
package cn.study.concurrency.ch11; /** * 锁分段 * @author xiaof * */ public class StripedMap { //同步策略:就 ...
- Lind.DDD.Manage项目核心技术分享
回到目录 关于Lind.DDD.Manager的培训与学习 讲解:张占岭 花名:仓储大叔 主要框架:Lind.DDD,Lind.DDD.Manager 关于Lind.DDD.Manager 由于数据模 ...
- 基于git diff进行的eslint代码检测
缘起 在项目中, 通常都会使用代码检测工具来规范团队的代码风格, 比如eslint.随着代码的不断增加, eslint进行代码检测的时间也越来越久.每次检测的时候, 需要检测的文件和实际检测的文件极度 ...
- 地理数据库 (Geodatabase) 版本管理
版本化地理数据库包含一些非版本化地理数据库中不存在的附加表格和记录.这些附加表和记录有助于长时间执行并行编辑.如果不进行版本化处理,则编辑者需要锁定数据并防止其他用户对数据进行编辑或查看.要使用此功能 ...
- Civil 3D API二次开发学习指南
Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...
- 把自己Github上的代码添加Cocoapods支持
转载请注明原链接:http://www.cnblogs.com/zhanggui/p/6003481.html 一.前言 这两天被cocoapods折磨的心力憔悴.看cocoapods官网的添加支持, ...
- iOS 限制TextField输入长度(标准)
iOS 限制TextField输入长度(标准) 网上有很多限制textField输入长度方法,但是我觉得都不是很完美,准确来说可以说是不符合实际开发的要求,因此在这里整理一下textField限制输入 ...
- 基于Ruby的watir-webdriver自动化测试方案与实施(一)
基于Ruby的watir-webdriver自动化测试方案与实施(五) 基于Ruby的watir-webdriver自动化测试方案与实施(四) 基于Ruby的watir-webdriver自动 ...
- mysqldump:Couldn't execute 'show create table `tablename`': Table tablename' doesn't exist (1146)
遇到了一个错误mysqldump: Couldn't execute 'show create table `CONCURRENCY_ERRORS`': Table INVOICE_OLD.CONCU ...