`
弄月吟风
  • 浏览: 197129 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java Socket编程

阅读更多

Java的Socket由Tcp和Udp两种,现在一般都是用Tcp协议的,因为他是一个全双工的可靠的连接;

Java Scoket客户端程序如下:

import java.io.*;

import java.net.*;

public class MyClient {

	public static void main(String[] args) {

		// 这里先强迫用户输入用户名,调用client(str)方法。

		String str = "";

		try {

			while (str.length() < 1) {

				System.out.println("请输入您的名字");

				str = new DataInputStream(new BufferedInputStream(System.in))
						.readLine();

			}

		} catch (Exception e) {

			e.printStackTrace();

		}

		MyClient.client(str);

	}

	public static void client(String userName) {

		try {

			Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 9527);// 套接字的IP地址和端口号

			OutputStream os = s.getOutputStream();// 得到输出流

			InputStream is = s.getInputStream();

			byte[] Name = userName.getBytes("ISO-8859-1"); // 这个是为了中文乱码问题

			os.write(Name);// 向服务器发送消息

			byte[] serverSay = new byte[100];

			int len = is.read(serverSay);// 接受服务器消息

			System.out.println(new String(serverSay, 0, len));// 客户端控制台显示服务器返回的信息

			is.close();

			os.close();

			s.close();// 记住一定要关闭这些输入,输出流和套接字

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

}

 服务端程序:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;

//这个简单的socket服务器端主要是说句Hello XXX,采用多线程实现
public class MyServer {
	private Socket s;
	private boolean keepRun = true;
	private OutputStream os;
	private InputStream is;

	public static void main(String[] args) {
		MyServer.server();// main入口,一运行机器,就开通server服务。
	}

	public MyServer(Socket s) {
		this.s = s;
		keepRun = true;
		try {
			s.setSoTimeout(3000);// 设置接收超时
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void run() {
		try {
			os = s.getOutputStream();
			is = s.getInputStream();
			while (keepRun) {
				Thread.sleep(1000);
				byte[] buf = new byte[1024];
				System.out.println("客户端接入");
				is.read(buf);// 从客户端读取消息
				String userName = new String(buf);
				if (userName.length() > 0)
					os.write(userName.getBytes());// 返回给客户端的欢迎信息
			}
			System.out.println("Socket连接关闭");
			keepRun = false;
			os.close();
			is.close();
			s.close();
		} catch (Exception e) {
			System.out.println("Socket关闭");
			keepRun = false;
			try {
				os.close();
				is.close();
				s.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			// e.printStackTrace();
		}
	}

	public static void server() {
		try {
			final ServerSocket ss = new ServerSocket(9527); // 服务器的套接字,端口为9527
			new Thread() {
				@Override
				public void run() {
					// TODO Auto-generated method stub
					super.run();
					while (true) {

						Socket s = null;
						try {
							System.out.println("zhixing1");
							s = ss.accept();
							System.out.println("zhixing2");
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						System.out.println("Socket接入");
						new MyServer(s).run(); // 用户一进来就运行一个线程
					}
				}
			}.start();
			System.out.println("zhixing");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics