Socket编程
Java实现
客户端
package net;
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",4701); //127.0.0.1表示客户端的ip地址
BufferedReader sin = new BufferedReader(new
InputStreamReader(System.in)); //读取键盘输入
PrintWriter os = new PrintWriter(socket.getOutputStream()); //向服务器端输出
BufferedReader is = new BufferedReader(new
InputStreamReader(socket.getInputStream())); //从服务器端接收输入流
String readline;
readline = sin.readLine(); //键盘首先输入一行
while(!readline.equals("bye"))
{
os.println(readline); //输出到服务器端
os.flush();
System.out.println("Client:"+readline); //打印客户端的信息
System.out.println("Server:"+is.readLine()); //打印服务器端的回信
readline = sin.readLine(); //继续接收键盘输入
}
os.close();
is.close();
socket.close();
}
catch(Exception e)
{
System.out.println("Error"+e);
}
}
}
服务器端
package net;
import java.io.*;
import java.net.*;
public class TalkServer {
public static void main(String[] args) {
try
{
ServerSocket server = null; //初始化一个ServerSocket对象
try
{
server = new ServerSocket(4701); //建立端口号4701
}
catch(Exception e)
{
System.out.println("can not listen to:"+e);
}
Socket socket = null; //服务器的socket
try
{
socket = server.accept();
//服务器等待来自接收端的socket情况,然后返回一个socket对象,如果没有接收端请求连接,就一直运行
}
catch(Exception e)
{
System.out.println("Error:"+e);
}
//下面这些原理跟客户端实现一样
String line;
BufferedReader is = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line = sin.readLine();
while(!line.equals("bye"))
{
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line = sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}
catch(Exception e)
{
System.out.println("Error:"+e);
}
}
}
下面看一下如何用命令行来运行这两个程序
基本步骤就是
- 到达这两个文件的根目录
- 使用javac xxx.java编译这两个文件生成对应的class文件
- 如果你是直接在一个文件夹下拷贝这两个文件,那直接使用命令java xxx(注意,这里没有后缀.class,但是运行的是class文件)
- 如果你是使用eclipse来保存这两个文件,这两个文件应该会被保存到src目录下,这时候你就要按图片上的来运行class文件(编译文件的话要到文件根目录),不然可能会报错,图片上的方式就是到达src目录下,java 下级目录.xxx 文件
- 注意,这只是一个简单的程序,只能够接收一条发送一条
- 要使用两个命令行窗口来运行
- 如果运行TalkServer.class文件报错,可能是端口号已经被使用了,可以换一个端口号,注意不要时要1~1024的端口号,其他的端口号随便用
参考:
,只能够接收一条发送一条
6. 要使用两个命令行窗口来运行
7. 如果运行TalkServer.class文件报错,可能是端口号已经被使用了,可以换一个端口号,注意不要时要1~1024的端口号,其他的端口号随便用
参考: