Socket--Java
Server.java
package socket; import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Server {
//监听的端口
public static final int PORT = 54039; public static void main(String[] args)
{
new Server().start();
} //启动监听线程的方法
public void start()
{
ServerSocket serverSocket = null;
try {
//新建一个ServerSocket对象,监听PORT端口,可能会抛出IOException
serverSocket = new ServerSocket(PORT);
System.out.println("serverScoket:" + serverSocket);
//循环监听
while(true)
{
//获取客户端连接,如果没有则阻塞
Socket clientSocket = serverSocket.accept();
//启动线程处理监听到的数据并启动线程
new Thread(new DataRunnable(clientSocket)).start(); }
} catch (IOException e) {
e.printStackTrace();
} finally{
if (null != serverSocket)
{
try {
serverSocket.close();
System.out.println("close serverSocket success!");
} catch (IOException e) {
System.out.println("close serverSocket failed!");
}
}
} } /**
* 处理监听信息的job
*/
private class DataRunnable implements Runnable
{
Socket client; public DataRunnable(Socket client) {
super();
this.client = client;
} public void run() {
try {
//读取客户端socket取输入流,包装成DataInputStream
DataInputStream dataIn = new DataInputStream(client.getInputStream());
DataOutputStream dataOut = new DataOutputStream(client.getOutputStream());
String content = dataIn.readUTF();//有read其他格式的方法,具体见api
//打印到控制台
System.out.println("content read in from client:" + content); //向客户端回复信息
System.out.println("请输入要回复的内容:");
String reply = new BufferedReader(new InputStreamReader(System.in)).readLine();
dataOut.writeUTF(reply); if("Close".equals(content))
{
System.out.println("client has been closed ,i want to be closed too");
}
dataIn.close();
dataOut.close();
} catch (IOException e) {
e.printStackTrace();
} } }
}
Client.java
package socket; import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException; public class Client {
public static final String ADDR = "localhost";//监听本机
public static final int PORT = 54039;//端口 public static void main(String[] args)
{
while(true)
{
Socket client = null;
DataInputStream dataIn = null;
DataOutputStream dataout = null;
try {
//创建客户端socket连接到主机服务器端
client = new Socket(ADDR, PORT); dataIn = new DataInputStream(client.getInputStream());
dataout = new DataOutputStream(client.getOutputStream()); //向服务器发送数据
System.out.println("请输入数据:");
String content = new BufferedReader(new InputStreamReader(System.in)).readLine();
dataout.writeUTF(content); //读取服务器端返回的数据
String reply = dataIn.readUTF();
System.out.println("server reply:" + reply); } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
if(null!=dataIn) dataIn.close();
if(null!=dataout) dataout.close();
if(null!=client) client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
Socket--Java的更多相关文章
- java.net.Socket/java.net.ServerSocket-TCP Socket编程
TCP 的 Java 支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP 协议族有 IP 协议.TCP 协议和 ...
- socket java 实例
简单的java socket 示例 一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端 ...
- Socket: Java Socket 几个重要的TCP/IP选项解析(转)
Socket选择可以指定Socket类发送和接受数据的方式.在JDK1.4中共有8个Socket选择可以设置.这8个选项都定义在java.net.SocketOptions接口中.定义如下: publ ...
- Socket: java Socket的isConnected()、和isClosed()判断是否在线的问题(转)
首先,很多初学者都会用这两个API来判断对方是否在线,但是经过我的实践,此API并不能实时判断是否在线的状态. 经过百度查询资料后,得出结论: 事实上这些方法都是访问socket在内存驻留的状态,当s ...
- java socket编程(li)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...
- socket编程-java
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- java socket编程(网络编程)
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- 【转】java的socket编程
转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...
- Java从零开始学四十五(Socket编程基础)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
随机推荐
- 使用http.sys,让delphi 的多层服务飞起来
核心提示:一直以来,delphi 的网络通讯层都是以indy 为主,虽然indy 的功能非常多,涉及到网络服务的各个方面,但是对于大多数多层服务来说,就是需要一个快速.稳定.高效的传输层.Delphi ...
- DES & 3DES 加密算法
JAVA坑 跟其他公司java的对接口,一个细节对到吐血,具体: DesUtil.java(别人的反例) //package base_class; import java.io.IOExceptio ...
- 【MySQL】Create table 以及 foreign key 删表顺序考究。
1.以下是直接从数据库导出的建表语句. 1 -- ---------------------------- 2 -- Table structure for files 3 -- ---------- ...
- ucenter用户登录过程
以用户登录为例介绍,其它注销,改密码,消息,头像,好友均类同. 从用户xxx在某一应用程序的login.php,输入用户名,密码讲起.先用uc_user_login函数到uc_server验证此用户和 ...
- screen 常用命令
screen -r <id | name> # 进入 screen C-a c # ctrl+a + c , 新建screen窗口 C-a A # ctrl+a + A, 命名scree ...
- python merry -- error handling in the real world
参考: https://www.youtube.com/watch?v=8kTlzR4HhWo https://github.com/miguelgrinberg/merry 背景 本文实际就是把 d ...
- VC++ 产生GUID或UUID
GUID 和 UUID 是一样的,表示全球唯一标识码. 下面是Windows系统中,产生GUID的一种方法(Windows API) char* GUID_Generator() { ] = {}; ...
- 使用jquery实现单选框、多选框取消选中状态
function radioReset(){ /*方式一*/ /* var radios = $("input[type='radio']"); for (i=0; i<ra ...
- node07-http
目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-exp ...
- Sublime Text 2 增加python版本
当系统中装有多个python版本时,Sublime Text 2 使用哪个版本需要手动添加 键入一下内容,path输入python的安转路径 保存至Python27.sublime-build文件 ...