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

  1. java.net.Socket/java.net.ServerSocket-TCP Socket编程

    TCP 的 Java 支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP 协议族有 IP 协议.TCP 协议和 ...

  2. socket java 实例

    简单的java socket 示例 一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端 ...

  3. Socket: Java Socket 几个重要的TCP/IP选项解析(转)

    Socket选择可以指定Socket类发送和接受数据的方式.在JDK1.4中共有8个Socket选择可以设置.这8个选项都定义在java.net.SocketOptions接口中.定义如下: publ ...

  4. Socket: java Socket的isConnected()、和isClosed()判断是否在线的问题(转)

    首先,很多初学者都会用这两个API来判断对方是否在线,但是经过我的实践,此API并不能实时判断是否在线的状态. 经过百度查询资料后,得出结论: 事实上这些方法都是访问socket在内存驻留的状态,当s ...

  5. java socket编程(li)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...

  6. socket编程-java

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  7. java socket编程(网络编程)

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  8. 【转】java的socket编程

    转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...

  9. Java从零开始学四十五(Socket编程基础)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  10. JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

    OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...

随机推荐

  1. 使用http.sys,让delphi 的多层服务飞起来

    核心提示:一直以来,delphi 的网络通讯层都是以indy 为主,虽然indy 的功能非常多,涉及到网络服务的各个方面,但是对于大多数多层服务来说,就是需要一个快速.稳定.高效的传输层.Delphi ...

  2. DES & 3DES 加密算法

    JAVA坑 跟其他公司java的对接口,一个细节对到吐血,具体: DesUtil.java(别人的反例) //package base_class; import java.io.IOExceptio ...

  3. 【MySQL】Create table 以及 foreign key 删表顺序考究。

    1.以下是直接从数据库导出的建表语句. 1 -- ---------------------------- 2 -- Table structure for files 3 -- ---------- ...

  4. ucenter用户登录过程

    以用户登录为例介绍,其它注销,改密码,消息,头像,好友均类同. 从用户xxx在某一应用程序的login.php,输入用户名,密码讲起.先用uc_user_login函数到uc_server验证此用户和 ...

  5. screen 常用命令

    screen -r <id | name>  # 进入 screen C-a c # ctrl+a + c , 新建screen窗口 C-a A # ctrl+a + A, 命名scree ...

  6. python merry -- error handling in the real world

    参考: https://www.youtube.com/watch?v=8kTlzR4HhWo https://github.com/miguelgrinberg/merry 背景 本文实际就是把 d ...

  7. VC++ 产生GUID或UUID

    GUID 和 UUID 是一样的,表示全球唯一标识码. 下面是Windows系统中,产生GUID的一种方法(Windows API) char* GUID_Generator() { ] = {}; ...

  8. 使用jquery实现单选框、多选框取消选中状态

    function radioReset(){ /*方式一*/ /* var radios = $("input[type='radio']"); for (i=0; i<ra ...

  9. node07-http

    目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-exp ...

  10. Sublime Text 2 增加python版本

    当系统中装有多个python版本时,Sublime Text 2  使用哪个版本需要手动添加 键入一下内容,path输入python的安转路径 保存至Python27.sublime-build文件 ...