由程序逻辑可以看到 这是一个 客户端和服务端一对一聊天的程序  首先由服务端说第一句话然后对话才开始

且只能客户端一行话  服务端再一行话 这样往复进行  客户端若想不等服务端回应继续说话是不行的

服务端

package rakus;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;
public class MyServer {
public static void main(String[] args) {
try {
ServerSocket ss;
ss = new ServerSocket(8888);
//wait for client to link then there will be a link between server and client
Socket sk = ss.accept();
System.out.println("a connection set up");
//server has to send msg to client and get msg from client
InputStream is=sk.getInputStream();
OutputStream os=sk.getOutputStream();
//BufferedReader对InputStreamReader作封装 以便于读一行数据
BufferedReader br=new BufferedReader(new InputStreamReader(is));
PrintWriter pw=new PrintWriter(os);
//get msg from console and send
BufferedReader brConsole=new BufferedReader(new InputStreamReader(System.in));
String msg=null;
String str = null;
while(1==1){
//print
msg=brConsole.readLine();
pw.println ("server : "+msg);
//注意这里不能使用print 因为对方是使用readLine()来接收数据的
//没有ln的话总是认为一行话没有结束
pw.flush();//pw可以使用 new PrintWriter(os.true)来创建 true表示autoFlush//那么就不用我手动Flush了
//read str from scoket
str = br.readLine();
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

客户端

package rakus;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class MyClient {
public static void main(String[] args) {
try {
// link server via ip and port
// InetAddress.getLocalHost() 局域网中得到本机IP地址
Socket sk = new Socket("127.0.0.1", 8888);
// inputSteam is used for get msg from server
// outputStream is for send msg to server
InputStream is = sk.getInputStream();
OutputStream os = sk.getOutputStream();
//BufferedReader往往用来读一行数据 br是用于读网络中的一行数据
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//pw用于把数据写入到网络中
PrintWriter pw = new PrintWriter(os);
//读取控制台的文字
BufferedReader brConsole = new BufferedReader(new InputStreamReader(
System.in));
// get a msg from server
String str = null;
String msg=null;//msg是发往客户端的消息
while(1==1){
//read
str = br.readLine();
System.out.println(str);
// send msg to server
msg = brConsole.readLine();
pw.println("client : "+msg);
pw.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

Java Socket 入门1的更多相关文章

  1. Java Socket入门

    Java Socket底层采用TCP/IP协议通信,通信细节被封装,我们仅仅需要指定IP.端口,便能轻易地创建TCP或UDP连接,进行网络通信.数据的读写,可以使用我们熟悉的stream进行操作. T ...

  2. Java Socket 入门2 Java与C# Socket 通信

    参考http://www.cnblogs.com/cdtarena/p/3184313.html 这里以C#作为服务端  其实不论C#是服务端还是客户端都不是主要问题 毕竟不论客户端还是服务端 都包括 ...

  3. Java Socket NIO入门

    Java Socket.SocketServer的读写.连接事件监听,都是阻塞式的.Java提供了另外一种非阻塞式读写.连接事件监听方式——NIO.本文简单的介绍一个NIO Socket入门例子,原理 ...

  4. 《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路

    以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门 ...

  5. java socket通讯(二)处理多个客户端连接

    通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...

  6. 如何为可扩展系统进行Java Socket编程

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

  7. Java Socket聊天室编程(一)之利用socket实现聊天之消息推送

    这篇文章主要介绍了Java Socket聊天室编程(一)之利用socket实现聊天之消息推送的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 网上已经有很多利用socket实现聊天的例子了 ...

  8. 史上最强Java NIO入门:担心从入门到放弃的,请读这篇!

    本文原题“<NIO 入门>,作者为“Gregory M. Travis”,他是<JDK 1.4 Tutorial>等书籍的作者. 1.引言 Java NIO是Java 1.4版 ...

  9. 是时候了解Java Socket底层实现了

    在Java中,提供了一系列Socket API,可以轻松建立两个主机之间的连接.读取数据,那底层到底怎么实现,很少人去关心.这其实最终还是通过调用操作系统提供得Socket接口完成(TCP/IP是由操 ...

随机推荐

  1. 2013 多校联合 F Magic Ball Game (hdu 4605)

    http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...

  2. .net 文件下载

    /** 输入参数* _Request: Page.Request 对象* _Response: Page.Response 对象* _fileName: 下载文件名* _fullPath: 带文件名下 ...

  3. IOS开发——正则表达式验证手机号、密码

    App的实际应用中,用户登陆功能基本是每个App都有需求的一个功能.而当前我们很常规的做法,就是让用户把手机号作为自己的用户名,而在注册获取短信验证码的过程中,我们首先要完成的一个步骤,就是校验用户的 ...

  4. 电脑技巧---完全控制面板---上帝模式(God Mode)

    简介 上帝模式,即"God Mode”,或称为“完全控制面板”.是Windows 系统中隐藏的一个简单的文件夹窗口,但包含了几乎所有Windows系统的设置,如控制面板的功能.界面个性化.辅 ...

  5. C++11多线程

    这篇文章说的很详细: https://www.ibm.com/developerworks/cn/linux/1412_zhupx_thread/

  6. 使用astyle格式化代码【脚本】

    astyle使用基础教程 http://cppblog.com/jokes000/articles/158838.html steps: (1) apt-get install astyle 或者去主 ...

  7. SDOI2008 Sandy的卡片( 后缀数组 )

    求出后缀数组, 然后二分答案, 对height数组分组检验答案. 时间复杂度O(|S| log|S|) ------------------------------------------------ ...

  8. PHP图片裁剪函数(图像不变形)

    PHP图片裁剪函数(图像不变形) <? *exif_imagetype -- 判断一个图像的类型 *说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形 * 参数说明:输入 需要处理图片的 ...

  9. 【转】jsp 表单form传值

    写的很好,看到了忍不住不转啊,希望可以分享一下~~ 转载自http://blog.csdn.net/anmei2010/article/details/4140216 页面间链接和数据传递的三种方式 ...

  10. Initialization failed for block pool Block pool(转载)

    2014-06-18 20:34:59,622 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed ...