您的位置:首页 > 编程语言 > Java开发

java socket 编程入门

2016-01-09 00:00 351 查看
摘要: 在eclipse里实现一个server类和client类,它们在本机上进行通信。

Server类需要做的是:

1.用ServerSocket指定端口,不妨指定为8888,只要保证这个端口好在本机中未被占用即可,代码如下:

ServerSocket serverSocket = new ServerSocket(8888);

2.接受并监听发送请求的的客户端Socket,代码如下:

Socket socket = serverSocket.accept();

3.用输入流接受客户端的数据:

InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String clientSay = br.readLine();

System.out.println("Client Say:"+clientSay);

socket.shutdownInput();

4.处理完之后,用输出流给客户端的字母变为大写的在传回去:

OutputStream os = socket.getOutputStream();

PrintWriter pw = new PrintWriter(os);

pw.print(clientSay.toUpperCase());

pw.flush();

5.关闭资源:

pw.print(clientSay.toUpperCase());
pw.flush();
pw.close();
os.close();
br.close();
isr.close();
is.close();

完整程序如下:

package com.net;

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 Server {
public static void main(String[] args)
{
try {
ServerSocket serverSocket = new ServerSocket(8888);

Socket socket = serverSocket.accept();
//接受客户端的信息
InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String clientSay = br.readLine();
// while(clientSay!=null)
// {
System.out.println("Client Say:"+clientSay);
//clientSay= br.readLine();
//}
socket.shutdownInput();
//发送信息给客户端
OutputStream os = socket.getOutputStream();

PrintWriter pw = new PrintWriter(os);

pw.print(clientSay.toUpperCase()); pw.flush(); pw.close(); os.close(); br.close(); isr.close(); is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Client类所做的事:

1.创建socket,指定主机地址,和端口号:

Socket socket = new Socket("127.0.0.1", 8888);

2.用输出流给指定的主机在控制台输入索要发送字母:

OutputStream os = socket.getOutputStream();

PrintWriter pw = new PrintWriter(os);

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String sendInfo = br.readLine();

pw.println(sendInfo);//注意换行,不然会出错,至于原因目前还不清楚,纠结。。。

pw.flush();

3.用输入流接受主机发过来的数据:

InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br1 = new BufferedReader(isr);

String serverSay = br1.readLine();

System.out.println("Server Say:"+serverSay);

4.关闭资源:

br.close();
pw.close();
os.close();
socket.close();

完整代码:

package com.net;

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.Socket;
import java.net.UnknownHostException;

public class Client {
public static void main(String[] args)
{
try {
Socket socket = new Socket("127.0.0.1", 8888);

//给服务器发送消息
OutputStream os = socket.getOutputStream();

PrintWriter pw = new PrintWriter(os);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sendInfo = br.readLine();
//while(sendInfo!=null)
//{
pw.println(sendInfo);
//}

pw.flush();
//接受服务端信息
InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br1 = new BufferedReader(isr); String serverSay = br1.readLine(); System.out.println("Server Say:"+serverSay);
br.close(); pw.close(); os.close(); socket.close();

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

希望能给有需要的人到来帮助,有不当之处,还请大家多包涵,与指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: