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. 应用程序启动管理 Winform版

    ★前言      开发这个小工具的想法主要是机器中安装了数据库,每次设置开机启动数据库服务的话,则系统启动很慢,每次都得手动到服务管理器中停止服务,很是繁琐,相信不少做开发的朋友会遇到同样的问题,就有 ...

  2. Hibernate插入数据后获得ID

    很多表的主键都是自增型的,新增的记录使用save()方法保存以后,要获得ID,直接使用getId()就可以了,因为此时记录已经保存进数据库,已经有了ID. 另一种方法是使用MySQL的SELECT L ...

  3. 《疯狂Java讲义》学习笔记——第2章 理解面向对象

    面向对象的三种基本特征:继承,封装,多态 UML(统一建模语言) 2.1 面向对象 2.1.1 结构化程序设计简介 图2.1  结构化软件的逻辑结构示意图 从图2.1可以看出,结构化设计需要采用自顶向 ...

  4. hibernate理解

    SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate,基于持久层的框架(数据访问层使用)! Spring,创建对象处理对象的依赖关系以及框架整合! Dao代码,如何编 ...

  5. 取消IE默认下载工具为迅雷

    需求:企业访问内部WEB系统下载文件时,IE默认下载工具设置为迅雷,则弹出迅雷下载框.现需要直接弹出IE下载保存框. 方案:打开迅雷,进行撤销默认下载工具. 1.迅雷5: 1.1. 打开迅雷下载工具 ...

  6. input标签内容改变的触发事件

    ---恢复内容开始--- 1. onchange事件与onpropertychange事件的区别: onchange事件在内容改变(两次内容有可能相等)且失去焦点时触发:onpropertychang ...

  7. li进度条宽度和颜色按顺序显示的效果。

    实际项目中li和里边的数值是动态生成的,需要控制它的宽度和颜色,效果如图: 如果能实现颜色按数值规律变化就好了,目前颜色是固定到数组中的. 实例代码如下: <!DOCTYPE html>& ...

  8. Linux安全基础:配置network

    在 Linux 系统中,TCP/IP 网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联网工作.系统中重要的有关网络配置文件有以下几项: /etc/sysconfig/network/etc ...

  9. SharePoint 2013 图文开发系列之事件接收器

    在SharePoint的使用中,我们经常需要在完成一个动作之后,触发一个事件:比如,我们上传一个文档,但是没有标题,我们需要在上传完成之后,触发一个事件把文件名同步到标题,这就需要用到事件接收器. 此 ...

  10. Android(Java)控制GPIO的方法及耗时分析

    前面两篇分别介绍了通过脚本和C代码读写/sys/class/gpio以控制GPIO.实际项目调试时经常还需要在Java代码里控制GPIO,其实现与C代码类似,唯一不同是Android权限.本文重点介绍 ...