【源码】新手初探java网络编程——socket接口实现简单的客户机/服务器程序
本帖最后由 Eternity-Myth 于 2017-9-12 21:42 编辑来吾爱第一帖。
关注了几个月了,几乎每天都在看论坛
注册了偶尔回回帖,这是第一次发帖({:1_925:}实话说挺紧张的,这里大佬好多,我只是萌新大学生一个,见笑了)
最近上计算机网络与通信技术的课,老师布置了这样一个任务:1、 请在C、C++、Java、Python等语言中选取一种,在socket接口上实现一个简单的客户机/服务器程序。2、 客户机向服务器发送两次数据,服务器求和后显示,并向客户机返回结果,客户机收到回应后显示结果。
正好在学习java中,于是选择java编写
(刷了几天黑马程序员 毕向东老师的java视频 关键的部分和代码记下来了 很多都是毕老师的代码我改写,很感谢毕老师{:1_921:})
源码:
/*
@author Eternity-Myth
@date 2017.9.12
*/
/*导入net包、IO包*/
import java.net.*;
import java.io.*;
/*创建客户端*/
class TCPClient
{
public static void main(String[] args)throws Exception
{
//创建客户端的Socket服务,指定目的主机和端口
Socket s=new Socket("192.168.x.xxx",xxxx);//此处输入ip地址和端口
//定义读取键盘数据的流对象
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//定义目的,将数据写入到socket输出流,发送给服务端
//BufferedWriter bufOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
//定义一个socket读取流,读取服务端返回的信息
BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;//检测 客户端输入over后退出
out.println(line);
String str=bufIn.readLine();//将服务器返回的信息用字符串str存储起来
System.out.println("Server:"+str);//打印服务器返回的信息
}
//关闭资源
bufr.close();
s.close();
}
}
/*
@author Eternity-Myth
@date 2017.9.12
*/
/*导入net包、IO包*/
import java.net.*;
import java.io.*;
/*创建服务器端*/
class TCPServer
{
/*构造trans函数
作用:将客户端传来的信息(字符)变成int类型并返回
*/
private static int trans(String str)
{
try
{
int num = Integer.parseInt(str);
return num;
}
catch(NumberFormatException e)
{
e.printStackTrace();
}
return 0;
}
public static void main(String[] args) throws Exception
{
//建立服务端socket服务,并监听一个端口
ServerSocket ss=new ServerSocket(6666);
//通过accept方法获取连接过来的客户端对象
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"......connected");
//读取socket读取流中的数据
BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
String line=null;
int count=1;//数组下标标识
int num[]=new int;
while((line=bufIn.readLine())!=null)
{
System.out.println(line);//在服务端打印客户端传来的信息
num=trans(line);//转换成int类型后,存储在int数组内
count++;//下标增加,移动到下一位
if(count%2==0)//判断是否是第一个数,如果是,在客户端打印
{
out.println("got the first num: "+num);
continue;
}
else//如果是第二个数,在客户端打印,并且打印两个数求和后的结果
{
System.out.println("the sum is: "+(num+num));
out.println("got the second num: "+num+" the sum is: "+(num+num));
}
}
//关闭资源
s.close();
ss.close();
}
}
有点小bug是输入了字符串(非数字) 服务端会报错
倾听指教 学习一下 刚刚入门表示只能看懂极少数代码{:301_1005:} {:301_1003:}加油吧,把SSH框架学了才勉强算入门 需要判断一下line是不是都是数字public static boolean isNumeric(String str)
{
Pattern pattern = Pattern.compile("*");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() )
{
return false;
}
return true;
}
页:
[1]