Java中的socket编程
来源:互联网 发布:北京申奥成功 知乎 编辑:程序博客网 时间:2024/06/05 21:12
客户端编写
开启Socket
如果在客户端,你需要写下如下的代码就可以打开一个socket。
import java.io.*;
import java.net.*;
import java.net.*;
public class MultiTalkClient
{
public static void main(String[] args) throws IOException
{
{
public static void main(String[] args) throws IOException
{
Socket client = null;
PrintWriter out = null;
BufferedReader in = null;
PrintWriter out = null;
BufferedReader in = null;
try {
client = new Socket("127.0.0.1", 4444);
out = new PrintWriter(client.getOutputStream(), true); //auto flush
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: 127.0.0.1.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: 127.0.0.1.");
System.exit(1);
}
client = new Socket("127.0.0.1", 4444);
out = new PrintWriter(client.getOutputStream(), true); //auto flush
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: 127.0.0.1.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: 127.0.0.1.");
System.exit(1);
}
//从标准输入流(键盘)中获取信息
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer, fromUser;
boolean sbye = false;
boolean ubye = false;
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer, fromUser;
boolean sbye = false;
boolean ubye = false;
System.out.print("Client input:");
fromUser = stdIn.readLine();
while( true )
{
if( ubye == false )
{
out.println(fromUser);
out.flush();
//System.out.println("Client: " + fromUser);
if (fromUser.equals("Bye."))
ubye = true;
}
fromUser = stdIn.readLine();
while( true )
{
if( ubye == false )
{
out.println(fromUser);
out.flush();
//System.out.println("Client: " + fromUser);
if (fromUser.equals("Bye."))
ubye = true;
}
if( sbye == false )
{
fromServer = in.readLine();
System.out.println("from Server: " + fromServer);
if (fromServer.equals("Bye."))
sbye = true;
}
{
fromServer = in.readLine();
System.out.println("from Server: " + fromServer);
if (fromServer.equals("Bye."))
sbye = true;
}
if( ubye == false )
{
System.out.print("Client input:");
fromUser = stdIn.readLine();
}
{
System.out.print("Client input:");
fromUser = stdIn.readLine();
}
if( ubye == true && sbye == true )
break;
}
break;
}
out.close();
in.close();
stdIn.close();
client.close();
}
}
in.close();
stdIn.close();
client.close();
}
}
关闭IO对象
类似文件IO,在读写数据完成后,我们需要对IO对象进行关闭,以确保资源的正确释放。
服务器端编写
打开服务器端的socket
import java.net.*;
import java.io.*;
import java.io.*;
public class MultiTalkServer
{
public static void main(String[] args) throws IOException
{
ServerSocket serverSocket = null;
boolean listening = true;
int clientNumber = 0;
{
public static void main(String[] args) throws IOException
{
ServerSocket serverSocket = null;
boolean listening = true;
int clientNumber = 0;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e)
{
System.err.println("Could not listen on port: 4444.");
System.exit(-1);
}
serverSocket = new ServerSocket(4444);
} catch (IOException e)
{
System.err.println("Could not listen on port: 4444.");
System.exit(-1);
}
while (listening)
{
Socket socket;
socket = serverSocket.accept(); //程序将在此等候客户端的连接
clientNumber++;
new MultiTalkServerThread(socket, clientNumber).start();
}
serverSocket.close();
}
}
{
Socket socket;
socket = serverSocket.accept(); //程序将在此等候客户端的连接
clientNumber++;
new MultiTalkServerThread(socket, clientNumber).start();
}
serverSocket.close();
}
}
class MultiTalkServerThread extends Thread
{
private Socket socket = null;
private int clientNumber;
{
private Socket socket = null;
private int clientNumber;
public MultiTalkServerThread(Socket socket, int clientNumber)
{
super("MultiTalkServerThread");
this.socket = socket;
this.clientNumber = clientNumber;
System.out.println("Accept Client" + clientNumber);
}
{
super("MultiTalkServerThread");
this.socket = socket;
this.clientNumber = clientNumber;
System.out.println("Accept Client" + clientNumber);
}
public void run()
{
{
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true); //auto flush
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true); //auto flush
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
BufferedReader sin = new BufferedReader( new InputStreamReader( System.in ) );
String sinputLine, inputLine;
boolean sinbye = false;
boolean inbye = false;
inputLine = in.readLine();
System.out.println( "from Client" + clientNumber + ": " + inputLine );
boolean sinbye = false;
boolean inbye = false;
inputLine = in.readLine();
System.out.println( "from Client" + clientNumber + ": " + inputLine );
while( true )
{
if(inputLine.equals("Bye."))
{
inbye = true;
sinbye = true;
sinputLine = "Bye.";
out.println(sinputLine);
out.flush();
System.out.println("Server: " + "Reply to client " + clientNumber +" : " + sinputLine);
}
else
{
sinputLine = "Reply to client " + clientNumber +" : " + inputLine;
out.println(sinputLine);
out.flush();
System.out.println("Server: " + sinputLine);
}
{
if(inputLine.equals("Bye."))
{
inbye = true;
sinbye = true;
sinputLine = "Bye.";
out.println(sinputLine);
out.flush();
System.out.println("Server: " + "Reply to client " + clientNumber +" : " + sinputLine);
}
else
{
sinputLine = "Reply to client " + clientNumber +" : " + inputLine;
out.println(sinputLine);
out.flush();
System.out.println("Server: " + sinputLine);
}
if( sinbye == true && inbye == true )
break;
break;
if( inbye == false )
{
inputLine = in.readLine();
System.out.println( "form Client " + clientNumber + ": " + inputLine );
}
}
{
inputLine = in.readLine();
System.out.println( "form Client " + clientNumber + ": " + inputLine );
}
}
out.close();
in.close();
socket.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
e.printStackTrace();
}
}
}
总结
进行客户端-服务器端编程还是比较有趣的,同时在Java中进行socket编程要比其他语言(如C)要简单快速编写。
阅读全文
0 0
- Java中的Socket编程
- Java中的Socket编程
- java中的socket编程
- java中的Socket编程
- Java中的socket编程
- java中的socket编程
- 读懂Java中的Socket编程
- 读懂Java中的Socket编程
- 读懂Java中的Socket编程
- 读懂Java中的Socket编程
- 读懂Java中的Socket编程
- 读懂Java中的Socket编程
- 读懂Java中的Socket编程
- Java Socket编程中的一个秘密类
- Java Socket编程中的一个秘密类
- Java Socket编程中的一个秘密类
- java中的Socket编程简单例子
- Java socket编程中的日志处理
- I2C设备驱动(二)
- leetCode刷题归纳-Dynamic Programming(64. Minimum Path Sum)
- LeetCode-136. Single Number (Java)
- linux gettimeofday的用法
- knn算法
- Java中的socket编程
- Vuforia开发基础(八):粒子系统
- 黑客帝国 demo
- 微信小程序开发(三)textarea的bug
- Android RotateAnimation
- 缺少GenericObjectPoolConfig包
- 46-52.个人练习。
- 云闪付是什么?
- VS2013编译FFmpeg