最近在做一个c与Java(unix-Linux)交互的项目,总体来讲c的输入输出只是send&recive,而Java却要将输出进行一次封装,输入端竟要两次,相比于c#太过繁杂,但是c#只能在Windows下运行。
附:
c:
#include<stdlib.h>;
#include<stdio.h>;
#include<errno.h>;
#include<string.h>
#include<netdb.h>;
#include<netinet/in.h>
#include<sys/socket.h>
void main(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1,1); //0x0101
err = WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return ;
}
if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
//wsaData.wVersion!=0x0101
{
WSACleanup();
return;
}
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN hostAddr;
hostAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
hostAddr.sin_family=AF_INET;
hostAddr.sin_port=htons(6000);
//connect
connect(sock,(sockaddr*)&hostAddr,sizeof(sockaddr));
char revBuf[128];
send(sock,"Hello host",11,0);
closesocket(sock);
}
Java:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author Modothirly
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
// TODO code application logic here
int port=6000;
try
{
ServerSocket serverSocket=new ServerSocket(port);
System.out.println("I'm running");
int counter = 0;
while(true)
{
Socket client=serverSocket.accept();
Thread T=new Thread(new serve(client));
T.setName(client.getInetAddress().getHostAddress()+":"+counter++);
T.start();
}
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author Modothirly
*/
public class serve implements Runnable
{
private Socket socket;
public serve(Socket socket)
{
this.socket=socket;
}
public void run()
{
try
{
BufferedReader br =new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
int endChar=0;
while((endChar=br.read())!=-1)
{
int strl=(int)endChar;
System.out.println(strl);
}
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
finally
{
try
{
if(socket !=null)
this.socket.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
}
}