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. Oracle内置函数:时间函数,转换函数,字符串函数,数值函数,替换函数

    dual单行单列的隐藏表,看不见 但是可以用,经常用来调内置函数.不用新建表 时间函数 sysdate 系统当前时间 add_months 作用:对日期的月份进行加减 写法:add_months(日期 ...

  2. eclipse中egit插件使用

    这篇文章当时制作有点粗糙,建议阅读升级版:eclipse中egit插件使用--升级版 使用git作为项目的代码管理工具现在是越来越火,网上有各种各样的文章.博客.讨论,其中以命令行居多.使用eclip ...

  3. Libscore – 收集 JavaScript 库的使用数据

    Libscore 扫描网络上成千上万的网站,收集统计 JavaScript 库的使用数据.在搜索框中,输入关键词,例如 jQuery, Modernizr, $.ui 或者 $.fn.fancybox ...

  4. jQuery鼠标经过显示大图

    效果:http://keleyi.com/keleyi/phtml/image/8.htm 以下是完整代码: <!DOCTYPE html> <html lang="en& ...

  5. less hack 兼容

    less hack 兼容 css做兼容是在所难免的,那么用less写css代码时怎样hack呢?倘若用css的方法直接在后面写上类似“\9”编译是要报错的.下面是我尝试的两个小方法仅供参考: 1.   ...

  6. TypeScript的4种编译方式

    1.手动编译 1.1.首先找到TypeScript的安装目录,我的在"C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0".

  7. iOS之设置头像(访问系统相册、本地上传)

    1. UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:                               ...

  8. xcode svn commit is not under version control (1) & git commit

    使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...

  9. iOS屏幕尺寸和分辨率了解

    1.截至目前为止,主流的iOS设备屏幕有以下几种: ---------------  iPhone  ---------- --------  iPad ------------ 2.iOS设备屏幕分 ...

  10. IOS开发基础知识--碎片1

    一:NSString与NSInteger的互换 NSInteger转化NSString类型:[NSString stringWithFormat: @"%d", NSInteger ...