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的更多相关文章

  1. Java 网络编程 -- 基于TCP 模拟多用户登录

    Java TCP的基本操作参考前一篇:Java 网络编程 – 基于TCP实现文件上传 实现多用户操作之前先实现以下单用户操作,假设目前有一个用户: 账号:zs 密码:123 服务端: public c ...

  2. Java Socket实现基于TCP和UDP多线程通信

    一.通过Socket实现TCP编程 1.1 TCP编程 TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据.基于TCP协议实现网络通信的类有客户端的Socket类和服务器端的ServerSo ...

  3. java Socket编程-基于UDP

    package com.wzy.UDPTest; import java.net.DatagramPacket; import java.net.DatagramSocket; import java ...

  4. Java 网络编程 -- 基于TCP实现文件上传

    Java TCP 操作基本流程 一.创建服务器 1.指定端口, 使用serverSocket创建服务器 2.阻塞式连接 accept 3.操作:输入流 输出流 4.释放资源 二.创建客户端 1.使用S ...

  5. Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊

    分析: 聊天室需要多个客户端和一个服务端. 服务端负责转发消息. 客户端可以发送消息.接收消息. 消息分类: 群聊消息:发送除自己外所有人 私聊消息:只发送@的人 系统消息:根据情况分只发送个人和其他 ...

  6. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  7. JAVA Socket 编程学习笔记(一)

    1. Socket 通信简介及模型 Java Socket 可实现客户端--服务器间的双向实时通信.java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的cli ...

  8. Java Socket编程题库

    一.    填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...

  9. 如何为可扩展系统进行Java Socket编程

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

随机推荐

  1. 编译可供C#调用的C/C++动态链接库dll文件

    编译可供C#调用的C/C++动态链接库dll文件,C语言控制台应用程序,探索生成dll过程 由于项目需求,需要公司另一个团队提供相关算法支持,是用C语言编译好的dll库提供给我们进行调用. 但是拿到d ...

  2. svn提交时出现很多乱文件怎么解决

    在我们开发项目中的时候经常使用到svn,有时候我们commit的时候回出现很多无用的文件,这些文件就是未版本化的文件,怎么解决这些乱文件的问题呢? svn commit提交的时候有个"sho ...

  3. SharedPreferences漏洞, 无法避免,所以不要在里面存储敏感信息

     1. SharedPreferences漏洞, 无法避免,所以不要在里面存储敏感信息2. 数据存储检测,content://com.starcor.launcherInfo/deviceInfo&q ...

  4. restful是什么

    resful是什么 rest是一种开发的风格,他不是框架,也没有类库,是一种约定 有什么不同 非restful的开发方式 当没有接触restful的时候,URL通常是动词,比如127.0.0.1:80 ...

  5. 高性能javascript学习笔记系列(6) -ajax

    参考 高性能javascript javascript高级程序设计 ajax基础  ajax技术的核心是XMLHttpRequest对象(XHR),通过XHR我们就可以实现无需刷新页面就能从服务器端读 ...

  6. 对CVE-2014-6271 [破壳漏洞] 的一次不太深入的跟踪

    @firtst:有些事,该你遇到的始终会遇到!2013年,Struts2远程代码执行漏洞闹的满城风雨时,当时还对此一无所知:2014年4月,HeartBleed掀起波涛汹涌时,较快对此予以关注,晚上跑 ...

  7. sharepoint 相关<httpHandlers>

    <add verb="GET,POST,HEAD,(GETSOURCE),(HEADSOURCE),(POSTSOURCE)" path="*.doc,*.docx ...

  8. Mac系统下Android生成keystore

    首先打开终端(在搜索里面搜索Te即可出来) 然后输入  cd /Library/Java/Home/bin/ 然后这步很关键,由于我们用的是当前用户,所以没有最高权限,不能在Library文件夹下生成 ...

  9. RoboGuice 3.0 (一)入坑篇

    RoboGuice是什么? 一个Android上的依赖注入框架. 依赖注入是什么? 从字面理解,这个框架做了两件事情,第一是去除依赖,第二是注入依赖.简单理解就是,将对象的初始化委托给一个容器控制器, ...

  10. jQuery与Zepto的异同

    一,同: Zepto最初是为移动端开发的库,是jQuery的轻量级替代品,因为它的API和jQuery相似,而文件更小.Zepto最大的优势是它的文件大小,只有8k多,是目前功能完备的库中最小的一个, ...