用socket(套接字)实现client与服务端的通信。

这里举两个样例:

第一种是每次client发送一个数据,服务端就做一个应答。

(也就是要轮流发)

另外一种是client能够连续的向服务端发数据,服务端也能够连续向client发数据。(多线程)

为了方便起见,client服务端都放在一个主机上。分别开两个进程[哈哈,进程间通信lol~]

PS: 一个聊天程序雏形

代码也放在GitHub上了:https://github.com/MummyDing/socketChatDemo

Demo 1:

简单的Socket通信。一人一句话就结束了(要一直说加个循环就好)

client

/**
Client
Author :MummyDing
*/
import java.lang.Runnable;
import java.io.*;
import java.net.*;
class clientConnect{
Socket client = null;
BufferedReader inputData = null;
PrintWriter outputData = null;
String receiveData ,sendData ; clientConnect(){
try {
client = new Socket("127.0.0.1", 5234);
dealData();
}
catch (Exception e) {
System.out.println("I cann't Connect!");
System.exit(1);
}
}
void dealData(){
try{
outputData = new PrintWriter(client.getOutputStream(), true);
inputData = new BufferedReader(new InputStreamReader(client.getInputStream())); sendMsg();
receiveMsg();
}catch (Exception e) {
System.out.println("Error ~");
} }
void sendMsg(){
outputData.println("Hello Server");
}
void receiveMsg(){
try{
receiveData = inputData.readLine();
System.out.println("Server said "+receiveData);
}catch (Exception e) {
System.out.println("Error");
} }
}
public class Client {
public static void main(String[] args) {
clientConnect connecte = new clientConnect();
}
}

服务端:

/**
Server
Author :MummyDing
*/
import java.lang.Runnable;
import java.net.*;
import java.io.*;
class serverConnect {
ServerSocket serverSocket = null;
Socket clientSocket = null;
String receiveData,sendData;
serverConnect(){
try {
serverSocket = new ServerSocket(5234);
clientSocket = serverSocket.accept();
dealData();
}
catch (Exception e) {
System.out.println("Server Bulid Error");
System.exit(1);
}
}
void dealData(){
try{
PrintWriter outputData = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader inputData = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
receiveData = inputData.readLine();
System.out.println("Client say:"+ receiveData);
outputData.println("Ha ha , I got your info: "+receiveData);
}catch (Exception e) {
System.out.println("Error!");
}
}
}
public class Server{
public static void main(String[] args) {
serverConnect connecte = new serverConnect();
}
}

Demo 2:

在Demo 1的基础上进行了该进,实现了一人能够连续说几句话。(多线程)

client:

/**
Client
Author:MummyDing
*/
import java.util.Scanner;
import java.lang.Runnable;
import java.io.*;
import java.net.*;
class clientConnect{
Socket client = null;
BufferedReader inputData = null;
PrintWriter outputData = null;
String receiveData ,sendData ;
clientConnect(){
try {
client = new Socket("127.0.0.1", 5234);
dealData();
outputData.println("OK");
}
catch (Exception e) {
System.out.println("I cann't Connecte!");
System.exit(0);
}
}
void dealData(){
try{
outputData = new PrintWriter(client.getOutputStream(), true);
inputData = new BufferedReader(new InputStreamReader(client.getInputStream()));
}catch (Exception e) {
System.out.println("Error ~");
System.exit(0);
}
}
String sendMsg(){
Scanner sc = new Scanner(System.in);
sendData = sc.nextLine();
outputData.println(sendData);
outputData.flush();
System.out.println("I say:"+ sendData);
return sendData;
}
boolean receiveMsg(){
try{
receiveData = inputData.readLine();
if(receiveData.equals("shutdown")) return false;
System.out.println("Server said "+receiveData);
}catch (Exception e) {
System.out.println("Error");
System.exit(0);
}
return true;
}
}
public class Client {
public static void main(String[] args) {
clientConnect connect = new clientConnect();
Thread t = new Thread(new Runnable(){
public void run(){
while(true){
connect.dealData();
if(connect.receiveMsg() == false){
System.out.println("SHUTDOWN!!!");
System.exit(0);
}
}
}
});
t.start();
while(connect.sendMsg().equals("shutdown") == false){
}
System.exit(0);
}
}

服务端:

/**
Server
Author:MummyDing
*/
import java.util.Scanner;
import java.lang.Runnable;
import java.net.*;
import java.io.*;
class serverConnect {
ServerSocket serverSocket = null;
Socket clientSocket = null;
String receiveData,sendData;
PrintWriter outputData ;
BufferedReader inputData;
serverConnect(){
try {
serverSocket = new ServerSocket(5234);
clientSocket = serverSocket.accept();
}
catch (Exception e) {
System.out.println("Server Bulid Error");
System.exit(1);
}
}
void dealData(){
try{
outputData = new PrintWriter(clientSocket.getOutputStream(), true);
inputData = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}catch (Exception e) {
System.out.println("Error!");
System.exit(0);
}
}
boolean receiveMsg(){
try{
receiveData = inputData.readLine();
if(receiveData.equals("shutdown")) return false ;
System.out.println("Client say:"+ receiveData);
}catch (Exception e) {
System.out.println("receive Error~");
System.exit(0);
}
return true;
}
String sendMsg(){
Scanner sc = new Scanner(System.in);
sendData = sc.nextLine();
outputData.println(sendData);
outputData.flush();
System.out.println("I say:"+ sendData);
return sendData;
}
}
public class Server{
public static void main(String[] args) {
serverConnect connect = new serverConnect();
Thread t = new Thread(new Runnable(){
public void run(){
while(true){
connect.dealData();
if(connect.receiveMsg() == false){
System.out.println("SHUTDOWN!!!");
System.exit(0);
}
}
}
});
t.start();
while(connect.sendMsg().equals("shutdown") == false){
}
System.exit(0);
}
}

--------------------------------------------------

期间犯了一个非常二的错误,client和服务端里面用了"同名类",这就导致后编译的把前面的"同名类"覆盖掉了。



完整代码: https://github.com/MummyDing/socketChatDemo

【转载请注明出处】

作者:MummyDing

出处:http://blog.csdn.net/mummyding/article/details/46445675

【Java】Java Socket 通信演示样例的更多相关文章

  1. java 状态模式 解说演示样例代码

    package org.rui.pattern; import junit.framework.*; /** * 为了使同一个方法调用能够产生不同的行为,State 模式在代理(surrogate)的 ...

  2. Java 反射经常用法演示样例

    <pre name="code" class="java">import java.lang.reflect.Constructor; import ...

  3. socket编程演示样例(多线程)

    client代码例如以下: import java.io.*; import java.net.*; import java.util.Scanner; public class SimpleChat ...

  4. python实现zabbix_sender的socket通信代码样例

    sk = socket.socket() sk.connect(self.ip_port) sk.settimeout(5) sk.sendall(b'ZBXD\x01') sk.sendall(b' ...

  5. Java线程演示样例 - 继承Thread类和实现Runnable接口

    进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...

  6. java 覆盖hashCode()深入探讨 代码演示样例

    java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...

  7. java并行调度框架封装及演示样例

    參考资料:  阿里巴巴开源项目 CobarClient  源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...

  8. Java连接redis的使用演示样例

    Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...

  9. java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨

    java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...

随机推荐

  1. Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported

    Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may no ...

  2. node.js操作Cookie

    node.js操作Cookie http://www.tuicool.com/articles/F3UF7n

  3. kafka查询topic属性含义

    第一行,列出了topic的名称,分区数(PartitionCount),副本数(ReplicationFactor)以及其他的配置(Config.s) Leader:1 表示为做为读写的broker的 ...

  4. Linux150个常用指令

    线上查询及帮助命令(2个) 文件和目录操作命令(18个) 查看文件及内容处理命令(21个) 文件压缩及解压缩命令(4个) 信息显示命令(11个) 搜索文件命令(4个) 用户管理命令(10个) 基础网络 ...

  5. 2015北京网络赛 J Scores bitset+分块

    2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...

  6. ThinkPad X260 UEFI安装 win7 64位 方法

    ThinkPad X260   UEFI安装 win7 64位 方法 1.使用DG重新格式化硬盘,格式为GPT 2.使用CGI  安装 WIM文件 (image不知是否可以,下次测试) 3.改BIOS ...

  7. subprocess模块使用

    subprocess 模块 一.简介 subprocess最早在2.4版本引入.用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值. subprocess用来替换多个旧模块 ...

  8. <QT障碍之路>QApplication:No such file or directory

    原因:QT5将很多部件都移动了QT widgets模块中. 解决方法: 在.pro文件中添加 greaterThan(QT_MAJOR_VERSION, ): QT += widgets

  9. tac---反转输出文件

    tac命令用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示.

  10. iOS 的组件化开发

    在一个APP开发过程中,如果项目较小且团队人数较少,使用最基本的MVC.MVVM开发就已经足够了,因为维护成本比较低. 但是当一个项目开发团队人数较多时,因为每个人都会负责相应组件的开发,常规开发模式 ...