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 ...
随机推荐
- 在.NET Core 1.0 RC2 上 运行 Orchard2
http://www.freeboygirl.com/running-orchard2-cms-on-core-rc2-net
- C程序范例(2)——学生管理系统”链表“实现
1.对于学生管理系统,能够实现的方法有许多,但是今天我们用链表的方法来实现.虽然初学者很可能看不懂,但是不要紧,这是要在整体的系统的学习完C语言之后,我才编写出的程序.所以大家不必要担心.在这里与大家 ...
- HttpClient在HTTP协议接口测试中的使用
TTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提交请求与RAW请求,下面我将结合HttpClient来实现一下这三种形式: 一.GET请求: GET请 ...
- GJM : JavaScript 语言学习笔记
JavaScript ------------------------------变量声明 : var a;变量赋值 : var a = 12; 函数声明 : var mAwesomeFunction ...
- checkbox & radio 的对齐问题
不仅不同浏览器不同,不同的字体,不同的文字大小也会表现不一样. 重置 form checkbox & radio 因为不同浏览器解析不一样,有些是默认margin,有些是默认padding,还 ...
- Android—自定义标题栏的实现及遇见的问题解决
开发者设计界面时候往往不会使用系统自带的标题栏,因为不美观,所以需要自己设置标题栏. 1.根据需求在xml文件中设置标题布局 <?xml version="1.0" enco ...
- ios 开发之单例模式
在iOS开发中,有很多地方都选择使用单例模式.有很多时候必须要创建一个对象,并且不能创建多个,用单例就为了防止创建多个对象.单例模式的意思就是某一个类有且只有一个实例.单例模式确保某一个类只有一个实例 ...
- Android自定义控件5--轮播图广告ViewPager基本实现
本文地址:http://www.cnblogs.com/wuyudong/p/5918021.html,转载请注明源地址. 本文开始实现轮播图广告系列,这篇文章首先实现让图片滑动起来(ViewPage ...
- 【Swift】 应用内显示 AppStore 某个应用的详情
前言 应用内跳转到 AppStore 的文章很多,一般都是用 SKStoreProductViewController 来实现的,不知道有没有在意一个问题:打开很慢!!怎么忍?! 声明 欢迎转载,但请 ...
- iOS RESideMenu 侧滑 第三方类库
下载地址:https://github.com/romaonthego/RESideMenu 效果如下:官方案例 自己的实现效果 具体代码下: AppDelegate.m文件中 - (BOOL)app ...