socket编程---一个简单例子
服务器端代码(单线程):
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编程---一个简单例子的更多相关文章
- socket编程——一个简单的例子
从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server client ++++ ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
- java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...
- socket编程——一个简单的样例
从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server client ++ ...
- 用socket.io实现websocket的一个简单例子
socket.io 是基于 webSocket 构建的跨浏览器的实时应用. 逛博客发现几个比较好的 一.用socket.io实现websocket的一个简单例子 http://biyeah.iteye ...
- socket编程,简单多线程服务端测试程序
socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.acce ...
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- (转)Java中使用正则表达式的一个简单例子及常用正则分享
转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...
- C语言多线程的一个简单例子
多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...
随机推荐
- Maven实站读后感
这本书是一本非常经典的Maven教程,通俗易懂,同时介绍的东西十分实用,在工作上都能用到. 以前在公司里面需要要问同时的有关的Maven的问题,都可以自己解决了. 除了最基本的,以后自己可能要用到的: ...
- java连接sqlserver2008报错 java.sql.SQLException: 对象名 '表名' 无效.
注意:c3p0的数据库配置方式为: <named-config name="sqlsvr"> <property name="driverClass&q ...
- java 把URL中的中文转换成utf-8编码
private static final String QUERY = "餐饮"; String sr = URLEncoder.encode(QUERY); System.out ...
- iPhone 6 & iPhone 6 Plus适配
转载请注明出处: http://www.cnblogs.com/dokaygang128/p/4049461.html Apple 今年发布了两款新的iPhone机器,iPhone 6 和iPhone ...
- 【BZOJ】【1115】【POI2009】石子游戏KAM
博弈论 这个题……一看就觉得很捉急啊= =肿么办? 灵光一现:差分一下~ 那么我们看一下差分以后,从第 i 堆中拿走 k 个石子变成了:a[i]-=k; a[i+1]+=k; 嗯这就转化成了阶梯博弈! ...
- [转载]C# 多线程、控制线程数提高循环输出效率
C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...
- 阿里云CentOS6.3 安装MongoDB教程
安装说明 系统环境:Centos-6.3安装软件:mongodb-linux-x86_64-2.2.2.tgz下载地址:http://www.mongodb.org/downloads安装机器:192 ...
- xargs 加 gm批量转换图片
%x50% @ ../-\ 南澳西涌_50%/@ 看了很多说明上都在用-i,这是一个已经废弃了的参数
- 【C++基础】 类中static private public protected
静态成员在一个类的所有实例间共享数据 “类属性”,是描述类的所有对象共同特征的一个数据项,对所有对象,它的值相同,static定义,为整个类所共有.相对于“实例属性” 如果static成员是私有类型, ...
- CF 86D Powerful array
离线+分块 将n个数分成sqrt(n)块. 对所有询问进行排序,排序标准: 1. Q[i].left /block_size < Q[j].left / block_size (块号 ...