客户端与服务器段能连接的上,但是,通过客户端给服务器短发信息却收不到。
vc段:[spsheep2003 (虫虫) ]的程序段(俺刚刚用vc啊,盗用一段,感谢虫虫)
char ipaddr[35]="192.168.0.99";
char buff[100]="something";
sockaddr_in cli;
SOCKET cliSocket;
cli.sin_addr.s_addr=inet_addr(ipaddr);
cli.sin_family=AF_INET;
cli.sin_port=htons(8067);
cliSocket=socket(AF_INET,SOCK_STREAM,0);
int k=connect(cliSocket,(sockaddr*)&cli,sizeof(cli));
if(k==0)
AfxMessageBox("spsheep2003");
else
AfxMessageBox("failed");
send(cliSocket,buff,sizeof(buff),0);java段:
ServerSocket s=new ServerSocket(8067);//在8067端口创建套接口
try
{
while(true)
{
Socket socket=s.accept();//无限监听客户的请求
System.out.println("收到数据报");
try
{
new ctiSocket(socket);//创建新线程
}ctiSocket类;部分。 public ctiSocket(Socket _socket) throws IOException {
socket = _socket;
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
start();
}
public void run() {
try{
while(true)
{
out.println("123456");
str=in.readLine();
out.println("123456");
if(str.equals("end")) break;
System.out.println(str);
System.out.flush ();
}
} catch ( Exception e ){
try {socket.close();
e.printStackTrace ();
}catch (Exception ee){}
}
}
当客户端关闭的时候,异常:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at sun.nio.cs.StreamDecoder$ConverterSD.implRead(StreamDecoder.java:285)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at ctiSer.ctiSocket.run(ctiSocket.java:38)
救救我啊,我已经半个月没有睡过安稳觉了。呜呜。
vc段:[spsheep2003 (虫虫) ]的程序段(俺刚刚用vc啊,盗用一段,感谢虫虫)
char ipaddr[35]="192.168.0.99";
char buff[100]="something";
sockaddr_in cli;
SOCKET cliSocket;
cli.sin_addr.s_addr=inet_addr(ipaddr);
cli.sin_family=AF_INET;
cli.sin_port=htons(8067);
cliSocket=socket(AF_INET,SOCK_STREAM,0);
int k=connect(cliSocket,(sockaddr*)&cli,sizeof(cli));
if(k==0)
AfxMessageBox("spsheep2003");
else
AfxMessageBox("failed");
send(cliSocket,buff,sizeof(buff),0);java段:
ServerSocket s=new ServerSocket(8067);//在8067端口创建套接口
try
{
while(true)
{
Socket socket=s.accept();//无限监听客户的请求
System.out.println("收到数据报");
try
{
new ctiSocket(socket);//创建新线程
}ctiSocket类;部分。 public ctiSocket(Socket _socket) throws IOException {
socket = _socket;
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
start();
}
public void run() {
try{
while(true)
{
out.println("123456");
str=in.readLine();
out.println("123456");
if(str.equals("end")) break;
System.out.println(str);
System.out.flush ();
}
} catch ( Exception e ){
try {socket.close();
e.printStackTrace ();
}catch (Exception ee){}
}
}
当客户端关闭的时候,异常:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at sun.nio.cs.StreamDecoder$ConverterSD.implRead(StreamDecoder.java:285)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at ctiSer.ctiSocket.run(ctiSocket.java:38)
救救我啊,我已经半个月没有睡过安稳觉了。呜呜。
如果客户端用这一段,
void CCSockClientDlg::OnSend()
{
// TODO: Add your control notification handler code here
if (m_clientSocket.m_bConnected)
{
m_clientSocket.m_nLength=m_MSG.GetWindowText
(m_clientSocket.m_szBuffer, sizeof(m_clientSocket.m_szBuffer));
m_clientSocket.AsyncSelect(FD_WRITE);
m_MSG.SetWindowText("");
}
}//**********************************void MySock::OnSend(int nErrorCode)
{
Send(m_szBuffer,m_nLength,0);
m_nLength=0;
memset(m_szBuffer,0,sizeof(m_szBuffer));
//继续提请一个“读”的网络事件,接收Server消息
AsyncSelect(FD_READ);
CAsyncSocket::OnSend(nErrorCode);}则是在客户端关闭的时候,就以前发送的消息累加发送到服务器段,文本读取正确。
同样产生上述引用异常。
期待恢复。现在是3:06分了,大家就当救命吧。
你的java代码用的是阻塞式调用,所以会“客户端关闭的时候,就以前发送的消息累加发送到服务器段”。阻塞式我没有做过,感觉你的线程的run有问题,不应该是个无限循环,收完后就走人。
你好。连接起来以后,java端可以给vc消息。但是,vc端不能给java端发消息。
我必须要等到这个数据才能作别的事情,所以用阻塞式,(非阻赛式也不懂了。)
run中通过判断收到的是否为end来判断停止接收。用java作客户端的,上面的java程序没有问题。
if(k==0)
AfxMessageBox("spsheep2003");
else
AfxMessageBox("failed");//如果这里的connect失败了,下面的send会成功吗?
send(cliSocket,buff,sizeof(buff),0);
还有:send(cliSocket,buff,sizeof(buff),0);
该是:send(cliSocket,buff,strlen(buff),0); 吧!?
你好,你有现成的程序可以给我一小段吗?[email protected] 小生叩谢了!