Scripts 学盟
标题:
Socket 网络编程
[打印本页]
作者:
那个谁
时间:
2011-5-19 16:37:06
标题:
Socket 网络编程
套接字(socket)是代表计算机之间网络连接的对象。要进行计算机间的网络通讯,建立TCP连接,那么就需要Socket编程,Java提供了ServerSocket类和Socket类,可以利用他们很方便的实现,计算机间的网络通讯。
因为Java把数据的传输已经抽象成InputStream和OutputStream的输入输出流,那么对网络通讯来说,其实就是利用ServerSocket类和Socket类建立起来网络连接,进行字节流或者字符流的输入输出操作。
下面我们还是通过一个例子来学习Socket编程:只会装傻的”智能“机器人
直接上代码,服务器端 TalkServer.java :
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) throws IOException {
// 创建一个ServerSocket
ServerSocket server = new ServerSocket(8080);
// 准备接受客户连接,如果有客户连接到,则创建一个socket对象,如果没有客户连接到,那么该程序会停在本行一直等待,像是在睡眠或者假死,这种行为叫做“阻塞”,阻塞是网络通信中的术语,就是你等别人响应,如果必须等到,等不到就一直等,就是阻塞,等不到也继续向前走的当然就是非阻塞。
Socket socket = server.accept();
// 从socket中获取一个输入对象,以便接受从网络上来的数据
BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 从标准输入中获取一个输入对象,以便接受从键盘上传来的数据,如果想让服务器端和客户端自由对话的话可以用此对象
//BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in));
// 从socket中获取一个
PrintWriter socketOutput = new PrintWriter(socket.getOutputStream(),true);
//定义一些变量
String input;
// 一直执行,直到客户端表示要断开
while(true){
//从客户端获取用户输入的字符串
input = socketInput.readLine();
//发送到屏幕
System.out.print("客户:");
System.out.println(input);
//准备好回复语句
String reply= reply(input);
//发送到客户端
socketOutput.println(reply);
//发送到屏幕
System.out.print("小瑶瑶:");
System.out.println(reply);
//客户如果输入的是再见则退出循环
if(input.equals("再见")){
break;
}
}
//关闭释放资源
socketInput.close();
socketOutput.close();
socket.close();
}
//回复方法
private static String reply(String input) {
String output=replys[number%7];
if(number%7==5){
output = output+" "+input;
}
number++;
return output;
}
//回复方法用到的一些变量
static int number =0;
static String[] replys = new String[7];
static{
replys[0]= "你说的啥,我听不见?";
replys[1]= "声音再大点行不?";
replys[2]= "声音再大点一点点行不?";
replys[3]= "还是听不清……";
replys[4]= "看来是网络的问题,你要不说慢点?";
replys[5]= "听到了!听到了!你说的是:";
replys[6]= "完了,又听不清了……";
}
}
复制代码
客户端代码 TalkClient.java :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TalkClient {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1",8080);
// 从socket中获取一个输入对象,以便接受从网络上来的数据
BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 从标准输入中获取一个输入对象,以便接受从键盘上传来的数据
BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in));
// 从socket中获取一个
PrintWriter socketOutput = new PrintWriter(socket.getOutputStream(),true);
// 定义一些变量
String input;
// 一直执行
while(true){
//从键盘获取数据,通过socket对象发送出去
input = keyboardInput.readLine();
socketOutput.println(input);
//接收从socket中获取的服务器端发回的回应信息,并发送到屏幕上
input = socketInput.readLine();
System.out.println(input);
}
}
}
复制代码
编译两个文件,先运行TalkServer,开始接收客户端的连接,然后运行客户端,在客户端上打字,服务器端会有回应,运行截图如下,这里上一个服务器端的截图:
2011-5-19 16:36:53 上传
下载附件
(403.12 KB)
附件:
image.png
(2011-5-19 16:36:53, 403.12 KB) / 下载次数 211
http://www.iscripts.org/forum.php?mod=attachment&aid=NDN8YTM2Zjg0OTF8MTczNDU1ODQ5NXwwfDA%3D
作者:
momo
时间:
2011-5-19 16:43:24
杰杰小妹,把你的分让给我点,混混再给你分就给我昂!!!
作者:
Alvin
时间:
2011-5-19 16:43:42
杰管好样的啊。。。比我厉害多了
作者:
momo
时间:
2011-5-19 16:53:21
回复
3#
混混@普宁.中国
混混你偏心。。。。。。。。。。。。
作者:
Alvin
时间:
2011-5-19 16:55:49
回复 混混@普宁.中国
混混你偏心。。。。。。。。。。。。
momo 发表于 2011-5-19 16:53
没偏心。。。
摸摸也来分享些。。。一样有分
作者:
那个谁
时间:
2011-5-20 09:24:02
回复
2#
momo
{:3_42:} 分有啥用。。、
作者:
Alvin
时间:
2011-5-20 09:43:30
有金钱,你可以买个道具
让摸摸在一定时间内不能回复
作者:
momo
时间:
2011-5-20 09:44:44
回复
6#
那个谁
只要比杰杰小妹高就行,不管咋说俺是姐姐呢不是?
作者:
那个谁
时间:
2011-5-23 09:36:40
混混偏心。。、漠漠都高级了。。我还是中级
作者:
混混@普宁.中国
时间:
2011-5-23 09:40:10
啊。。不对劲,,摸摸怎变成高级了.
作者:
混混@普宁.中国
时间:
2011-5-23 09:40:40
积分比我还高
作者:
momo
时间:
2011-5-23 09:42:58
那个谁 发表于 2011-5-23 09:36
混混偏心。。、漠漠都高级了。。我还是中级
喔蕾蕾欧啦啦,我比你高喽,试试我的涂鸦板
作者:
混混@普宁.中国
时间:
2011-5-23 09:50:08
回头给那个杰拜个官职
作者:
Yisin
时间:
2011-5-23 22:29:53
学习了。
欢迎光临 Scripts 学盟 (http://www.iscripts.org/)
Powered by Discuz! X2