服务器端代码(单线程):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; public class TalkServer { public static void main(String[] args) {
ServerSocket server = null;
try {
server = new ServerSocket(4700);
} catch (IOException e) {
System.out.println("Can not listen 4700.");
}
Socket socket = null;
try {
socket = server.accept();
} catch (IOException e) {
e.printStackTrace();
} String line;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:" + reader.readLine());
line = sysin.readLine();
while (!line.equals("bye")) {
printWriter.print(line);
printWriter.flush();
System.out.println("Server:" + line);
System.out.println("Client:" + reader.readLine());
line = sysin.readLine();
}
reader.close();
sysin.close();
printWriter.close();
socket.close();
server.close(); } catch (IOException e) {
e.printStackTrace();
} }
}

客户端代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; public class TalkClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 4700);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
String readline = sysin.readLine();
while (!readline.equals("bye")) {
out.println(readline);
out.flush();
System.out.println("Client:" + readline);
System.out.println("Server:" + in.readLine());
readline = sysin.readLine();
}
in.close();
out.close();
sysin.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

服务器端代码(多线程):

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner; public class MultiEchoServer {
private static ServerSocket serverSocket;
private static final int PORT = 12345; public static void main(String[] args) throws IOException {
try {
serverSocket = new ServerSocket(PORT);
} catch (IOException e) {
System.out.println("Unable connect to the port");
System.exit(1);
}
do {
Socket client = serverSocket.accept();
System.out.println("New client accept...");
ClientHandler clientHandler = new ClientHandler(client);
clientHandler.start();
} while (true);
}
} class ClientHandler extends Thread {
private Socket client;
private Scanner input;
private PrintWriter output; public ClientHandler(Socket client) {
this.client = client;
try {
input = new Scanner(client.getInputStream());
output = new PrintWriter(client.getOutputStream(),true);
} catch (IOException e) {
e.printStackTrace();
}
} @Override
public void run() {
String receive = "";
do {
receive = input.nextLine();
System.out.println("Server receive message:" + receive);
output.println("Echo:" + receive);
} while (!receive.equalsIgnoreCase("q"));
try {
if (client != null) {
System.out.println("Closing connection...");
client.close();
}
} catch (IOException e) {
System.out.println("Unable to close connection...");
}
}
}

客户端代码:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner; public class MultiEchoClient {
private static InetAddress host;
private static final int PORT = 12345; public static void main(String[] args) {
try {
host = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
System.out.println("Host id not found!");
System.exit(1);
}
SenderMessages();
} public static void SenderMessages() {
Socket socket = null;
try {
socket = new Socket(host, PORT);
Scanner input = new Scanner(socket.getInputStream());
PrintWriter outpout = new PrintWriter(socket.getOutputStream(),true);
Scanner userInput = new Scanner(System.in);
String message, response;
do {
System.out.println("Enter Message:");
message = userInput.nextLine();
outpout.println(message);
response = input.nextLine();
System.out.println("Server " + response);
} while (!message.equalsIgnoreCase("q"));
input.close();
userInput.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null) {
System.out.println("Closing connetion...");
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} }

socket编程---一个简单例子的更多相关文章

  1. socket编程——一个简单的例子

    从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server                                                  client ++++ ...

  2. [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

    以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...

  3. java socket编程开发简单例子 与 nio非阻塞通道

    基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...

  4. socket编程——一个简单的样例

    从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server                                                  client ++ ...

  5. 用socket.io实现websocket的一个简单例子

    socket.io 是基于 webSocket 构建的跨浏览器的实时应用. 逛博客发现几个比较好的 一.用socket.io实现websocket的一个简单例子 http://biyeah.iteye ...

  6. socket编程,简单多线程服务端测试程序

    socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.acce ...

  7. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  8. (转)Java中使用正则表达式的一个简单例子及常用正则分享

    转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...

  9. C语言多线程的一个简单例子

    多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...

随机推荐

  1. python SendMail 发送邮件

    最近在学习python 时,用到了发送邮件的操作,通过整理总结如下: 1.普通文本邮件 普通文本邮件发送的实现,关键是要将MIMEText中_subtype设置为plain,首先导入smtplib和m ...

  2. QT for android 比较完美解决 全屏问题

    项目用到QT qml,需要在android下面全屏显示,折腾了一晚上,搞定,分享下,希望能帮助他人. 参考 Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示 该 ...

  3. 数字式PID控制的应用总结

    PID控制是一个二阶线性闭环控制器,通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.PID控制优点:a. 技术成熟,b. 易被人们熟悉和掌握,c. 不需要建立数学模型 ...

  4. gcd,lcm,ext_gcd,inv

    Least Common Multiple http://acm.hdu.edu.cn/showproblem.php?pid=1019 #include<cstdio> int gcd( ...

  5. android 解析XML方式(一)

    在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据呢? ...

  6. c# Invoke和BeginInvoke 区别

    原文:http://www.cnblogs.com/mashang/archive/2009/08/01/1536730.html Control.Invoke 方法 (Delegate) :在拥有此 ...

  7. ubuntu -LDAP的配置

    本文内容来自 http://blog.csdn.net/jl19861101/article/details/5582841 1. LDAP Server1.1. 安装主要安装一下套件: 代码: # ...

  8. Vimrc配置以及Vim的常用操作

    """"""""""""""""&quo ...

  9. 理解maven

    1.理解“仓库” 首次运行完mvn -version后,会在用户目录下创建一个.m2的目录(比如:C:\Users\当前用户名\.m2\),这个目录是maven的“本地仓库”,仓库是maven中一个很 ...

  10. SpringMVC,MyBatis商品的增删改查

    一.需求 商品的增删改查 二.工程结构 三.代码 1.Mapper层 (1) ItemsMapperCustom.java package com.tony.ssm.mapper; import ja ...