Socket 编程

来源:互联网 发布:知乎 周广甫 编辑:程序博客网 时间:2024/06/09 19:41


现在写两个服务器监听程序:


public class ServerActivity extends Activity {



private Button btnTcpServer;
private Button btnUdpcpServer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server);

//tcp服务器监听程序
btnTcpServer=(Button)findViewById(R.id.btn_tcp_server);
btnTcpServer.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
System.out.println("启动TCP监听线程");
new TcpServerThread().start();
}
});


//Udp服务器监听程序
btnUdpcpServer=(Button)findViewById(R.id.btn_udp_server);
btnUdpcpServer.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
System.out.println("启动UDP监听线程");
new UdpServerThread().start();
}
});




}

class UdpServerThread extends Thread{


@Override
public void run() {


try {
//创建爱你一个DatagramSocket对象,并指定监听的端口号
DatagramSocket socket =new DatagramSocket(4567);
byte data[] =new byte[1024];
//创建一个空的Datagram对象
DatagramPacket packet =new DatagramPacket(data,data.length);
socket.receive(packet);
String result =new String(packet.getData(),packet.getOffset(),packet.getLength());
System.out.println(result);

} catch (IOException e) {

e.printStackTrace();
}
finally{


}


}


}



class TcpServerThread extends Thread{


@Override
public void run() {
ServerSocket serverSocket =null;

try {
serverSocket=new ServerSocket(4567);
Socket socket =serverSocket.accept();
InputStream inputStream=socket.getInputStream();
byte buffer [] =new byte[1024*4];
int tmp=0;
while((tmp=inputStream.read(buffer))!=-1)
{
System.out.println(new String(buffer,0,tmp));
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{

try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}


}




//下面是分别两种发送消息的方式


TCP:

public class TcpClient {


/**
* @param args
*/
public static void main(String[] args) {

try {

Socket socket =new Socket("172.0.0.1",4567);
InputStream inputStream =new FileInputStream("D://Android Development Enviorment/workspace/TestClient/file/text.txt");
OutputStream outputStream=(OutputStream) socket.getOutputStream();
byte buffer[] =new byte[4*1024];
int tmp=0;
while((tmp=inputStream.read(buffer))!=-1)
{
outputStream.write(buffer,0,tmp);
}
outputStream.flush();

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}


UDP:

public class UdpClient {


/**
* @param args
* @throws IOException 
*/
public static void main(String[] args) throws IOException {


try {
// 首先创建爱你一个DatagramSocket 对象
DatagramSocket socket =new DatagramSocket(4567);

// 创建一个InetAddress
InetAddress serverAddress = InetAddress.getByName("172.0.0.1");
String str="hello";
byte data[] =str.getBytes();
DatagramPacket packet =new DatagramPacket(data,data.length,serverAddress,4567);
socket.send(packet);

} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}






}