学习了java的多线程,参考了一部分别人的代码,写了一个简单的客户端和服务器端的程序,服务器要在客户端之前运行,不然在运行客户端的时候会报错,然后服务器只能运行一次,多次运行也会报错,代码如下。。。
package com.jk.net;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String ip ="192.168.0.43";
int port = 333;
try {
//通过ip和port获得一个和主机端口对应的socket对象
Socket m_socket = new Socket(ip, port);
BufferedOutputStream out = new BufferedOutputStream(
m_socket.getOutputStream());
out.write("欢迎来到季科的博客".getBytes());
out.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package www.jk.test;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Sever {
public static void main(String[] args) {
//设定当前端口
int port = 333;
try {
//获得服务器口
ServerSocket m_ServerSocket = new ServerSocket(port);
while (true) {
//阻塞,当有客户来调用时,创建一个socket对象
Socket m_socket = m_ServerSocket.accept();
//调用一个线程来处理当前对象
myThread s = new myThread(m_socket);
s.start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package www.jk.test;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.Socket;
public class myThread extends Thread {
Socket m_socket;
//将主机需要处理的socket对象用来初始化当前对象
public myThread(Socket m_socket) {
super();
this.m_socket = m_socket;
};
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
//开始读取数据
BufferedInputStream bis = new BufferedInputStream(
m_socket.getInputStream());
byte buffer[] = new byte[12];
while (bis.read(buffer) != -1) {
String info = new String(buffer);
System.out.println(info);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
当然,这个只是一个简单的单方面发送消息的客户端与服务器端,而且在读取文件的时候存在一点问题,希望看到博客的人指点如何处理文件读取的问题。